Python中句子精确匹配的正则表达式

2024-03-29 09:31:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一篇有很多句子块和完整句子的课文。这些句子的格式如下:

Text=Some aliens try to run into the fields
Text=Some aliens try
Text=Some aliens try to run

我想匹配查询变量中的文本(对于当前示例'Some aliens try')。在

我正在使用以下代码:

^{pr2}$

但是,我的正则表达式似乎不正确,findall()不返回任何结果,为什么?在


Tags: thetorun代码text文本示例fields
3条回答

默认情况下,查询中的$只与字符串的末尾匹配。在

使用^{}选项使$与任何行的结尾匹配:

my_query_reg = re.compile("".join(['Text=', QUERY, '$']), re.MULTILINE)

如果我明白你想要什么,试试这个:

import re

txt='''\
Text=Some aliens try to run into the fields
Text=Some aliens try
Text=Some aliens try to run'''

QUERY='Some aliens try'
print re.findall(r'^(Text={}\s*)$'.format(QUERY), txt, re.M)
# ['Text=Some aliens try']

它具有re.M标志,因此行开始^和行尾$锚定将与新行匹配,而不是仅限于整个字符串。在

您还可以使用“传统”Python字符串格式将查询字符串插入到模式中:

^{pr2}$

您可以根据需要添加各种\s*,以补偿文本的噪音。在

对于这样一个简单的例子,不要忘记Python的字符串测试:

print [line for line in txt.splitlines() if line.strip().endswith(QUERY)]
# ['Text=Some aliens try']
import re

TEXT = """Text=Some aliens try to run into the fields
Text=Some aliens try
Text=Some aliens try to run"""

QUERY = 'Some aliens try'

my_query_reg = re.compile('Text=\s*(%s)\s*$' % QUERY,re.M)
print my_query_reg.findall(TEXT)

\s*以防=与所研究的字符串之间或字符串与行尾之间存在空格

相关问题 更多 >