我不明白为什么下面的正则表达式和文本产生他们的结果。我使用notepad ++中的正则表达式查找功能,没有Wrap_around,也没有匹配的换行符。正则表达式:正则表达式与嵌套组和点导致古怪匹配
name ="[\w]+\.((?:[\w]*\.?)+)" p
当应用于文本:
名= “data.messageHeader.msg_time_tag $日期” PZB
这是2号线
的整个文本最后突出显示,这应该是不可能的,因为正则表达式不应该匹配美元符号或换行符/回车符。
我也尝试应用正则表达式与Python的文本're'。在这种情况下,我一行一行地解析完整的文件。最初,Python正确地与美元符号的行不匹配,但即使它们只有大约100个字符,这些行也需要几秒钟才能完成。通过包含我的示例结构的第四行或第五行,点分隔的单词包含'$',python冻结,直到我手动停止它。
使用的Python代码:
import re
def main():
pattern = re.compile(r"name =\"\w+\.((?:\w+\.?)+)\" p")
with open(r"filepath", "r") as f:
i = 0
for line in f:
match = pattern.search(line)
if (match):
print('<Match: %r, groups=%r>' % (match.group(), match.groups()))
else:
print("line %d nomatch" % (i))
i+=1
match = None
#it = pattern.finditer(f.read())
#for element in it:
#displaymatch(element)
def displaymatch(match):
if match is None:
return None
print('<Match: %r, groups=%r>' % (match.group(), match.groups()))
main()
你能解释一下为什么会这样?
你想用这种模式做什么?对于初学者,您试图**捕获**一组多个**非捕获**超前组,在大多数情况下,由于'无限'回溯'会破坏正则表达式引擎(先行组会导致单独的线程在当前位置前面匹配,而当前位置保持在同一位置)。我很坦然地惊讶它甚至没有发生错误。 – zwer
@zwer现在就读起来了......我的目标是捕捉一段由句点分隔的单词。具体来说,我想在第一个单词和第一个句点之后捕获字符串。我需要在我的replace语句中引用该字符串的那部分。 – Derek
@zwer我也应该注意到,当我改变正则表达式来 名= “[\ W] + \((?:[\ W \ $] * \)+?)。” P 它按预期工作,接受美元符号的字符串。 – Derek