Python 搜索包含回车符和换行符的子字符串

Python 搜索包含回车符和换行符的子字符串,python,regex,python-2.7,Python,Regex,Python 2.7,我有一个Python脚本,它使用套接字连接与另一个应用程序(确切地说是连接到嵌入式目标的调试器)通信 来自调试器的响应的长度可以不同,并且可以跨越多行,但它们总是以True\r\n或False\r\n结尾。我想捕获True或False,包括换行符 我使用的正则表达式(例如,r'^[.]+|[\r]+|[\n]+(True\r\n)$'表示True)在测试时似乎可以工作,但在使用Python运行时仅返回\r 带有示例响应字符串的示例代码: import re sample_response =

我有一个Python脚本,它使用套接字连接与另一个应用程序(确切地说是连接到嵌入式目标的调试器)通信

来自调试器的响应的长度可以不同,并且可以跨越多行,但它们总是以
True\r\n
False\r\n
结尾。我想捕获
True
False
,包括换行符

我使用的正则表达式(例如,
r'^[.]+|[\r]+|[\n]+(True\r\n)$'
表示True)在测试时似乎可以工作,但在使用Python运行时仅返回
\r

带有示例响应字符串的示例代码:

import re  
sample_response = 'var0 = 0x00000001\r\nTrue\r\n'
re_true = re.compile(r'^[.]+|[\r]+|[\n]+(True\r\n)$')
print re_true.search(sample_response).group(0) # Will print out '\r'
我知道我使用的正则表达式有一些根本性的问题。我还尝试了如下所示的积极查找,这似乎有效,但我不确定这是否是正确的方法:

import re  
sample_response = 'var0 = 0x00000001\r\nTrue\r\n'
re_true = re.compile(r'(?<=(True\r\n))')
print re_true.search(sample_response).group(0) # Will print out ''
print re_true.search(sample_response).group(1) # Will print out 'True\r\n'
重新导入
示例\u响应='var0=0x00000001\r\n队列\r\n'

re_true=re.compile(r’(?您说需要匹配
true\r\n
False\r\n
,那么模式中的
^[.]+\r]+
是多余的。使用

re.search(r'[\r\n]*\b(?:True|False)[\r\n]*$', s)
如果在
True
False
之前不需要换行,则可以省略首字母
[\r\n]*

详细信息

  • [\r\n]*
    -零个或多个CR或LF符号
  • \b
    -单词边界
  • (?:True | False)
    -将
    True
    False
    作为整个单词
  • [\r\n]*
    -如上所述
  • $
    -字符串结束

是的,但regex101没有
\r
,它的换行样式是
\n
。在尝试
True
部分之前,您的regex匹配输入中的
\r
,这是在NFA regex中获胜的第一个选择。请尝试
re.findall
或重新考虑要求。是的,我使用了regex101.com上的\n来测试我的regex…不管怎样,regex101引用可能是TMI,并不是我真正的问题:)我将用findall进行测试…谢谢!那为什么要使用交替呢?你说你需要匹配
True\r\n
False\r\n
-使用
r'[\r\n]*\b(?:True\False)[\r\n]*$'
重新搜索
。是的,这似乎是可行的…开始时的替代方法是在终止True或False之前忽略任何字符或换行符等…但这可能是错误的方法。