Python 搜索包含回车符和换行符的子字符串
我有一个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 =
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之前忽略任何字符或换行符等…但这可能是错误的方法。