[英]Exact search of a string that has parenthesis using regex
我是正则表达式的新手。
我有以下字符串: \n(941)\n364\nShackle\n(941)\nRivet\n105\nTop
从这个字符串中,我想提取Rivet
并且我已经将(941)
作为变量中的字符串。
我的思考过程是这样的:
(941)
s(941)
之后的字符串是否后跟 \n、后跟一个单词并以 \n 结尾来过滤结果\n[\w\s\'\d\-\/\.]+$\n
。 我面临的问题是,由于(941)
中的括号,正则表达式将 941 作为一个组。 在第三步中,正则表达式可能是错误的,我可以稍后修复,但第一步我需要帮助来找到第二步(941)
,所以我可以应用第三步。
PS。
(?:...)
, (941){1}
和像这样\(941\)
的 make 正则表达式文字字符\
没有有用的结果。 也许我用错了。只是想知道是否可以使用正则表达式来完成。 虽然它可能对其他人也有用,或者对未来的观众来说是一个很好的分享。
谢谢
假设:
尝试转义变量并通过 f-string 在正则表达式中使用它:
import re
s = '\n(941)\n364\nShackle\n(941)\nRivet\n105\nTop'
var1 = '(941)'
var2 = re.escape(var1)
m = re.findall(fr'{var2}\n(?!\d+\n)(\w+)', s)[0]
print(m)
印刷:
Rivet
如果变量中的文本应该完全匹配,请在替换到正则表达式时使用re.escape()
将其转义。
s = '\n(941)\n364\nShackle\n(941)\nRivet\n105\nTop'
num = '(941)'
re.findall(rf'(?<=\n{re.escape(num)}\n)[\w\s\'\d\-\/\.]+(?=\n)', s)
这会将(941)\n
放在后面,因此它不包含在匹配中。 这避免了一场比赛结束时的\n
与下一场比赛开始时的\n
重叠的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.