蟒蛇.正则表达式

Pol*_*Pol 0 python regex

如何找到symols之后的所有内容#TR= 以及[ ]使用re模块的内部.例如#TR=[ dfgg dfgddfg dgfgf dgdgdg dfgfg ]

Mar*_*tyn 5

import re
txt = '#TR=[ dfgg ] a kuku #TR=[ala ma kota]'
Run Code Online (Sandbox Code Playgroud)

如果您只想搜索此模式的第一个匹配项,请使用:

matches = re.search('#TR=\[([^\]]*)\]', txt)
if matches:
    print(repr(matches.group(1)))
' dfgg dfg '
Run Code Online (Sandbox Code Playgroud)

如果要查找文本中的所有匹配项,请使用:

matches = re.findall('#TR=\[([^\]]*)\]', txt)
if matches:
    print(matches)
[' dfgg ', 'ala ma kota']
Run Code Online (Sandbox Code Playgroud)

请记住检查您要搜索的字符在正则表达式(如或)中是否具有特殊含义.如果它们是特殊的,用反斜杠逃脱它们:.[]\[

还要记住,默认情况下,正则表达式是"贪婪的",这意味着他们试图获得尽可能多的文本以匹配模式; 因此,如果您使用.*(这意味着"匹配除换行符之外的任何字符"; 详细信息)而不是[^\]]*(这意味着"匹配直到]找到它,并在它之前停止"),可以匹配太多文本:

matches = re.findall('#TR=\[(.*)\]', txt)
if matches:
    print(matches)
[' dfgg ] a kuku #TR=[ala ma kota']
Run Code Online (Sandbox Code Playgroud)

你也可以?在你的模式中使用"非贪婪"修饰符,在限定符(*,+)之后启用"少 - 字符 - 更好"匹配(使用*?,+?).结果可能更具可读性:

'#TR=\[(.*?)\]'
Run Code Online (Sandbox Code Playgroud)

代替:

'#TR=\[([^\]]*)\]'
Run Code Online (Sandbox Code Playgroud)

有一个很棒的在线工具可以测试你的模式:Grant Skinner的RegExr.