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.