python中的正则表达式:如何在模式中使用变量字符串? [复制]
Posted
技术标签:
【中文标题】python中的正则表达式:如何在模式中使用变量字符串? [复制]【英文标题】:regex in python: how to use variable string in pattern? [duplicate] 【发布时间】:2016-11-17 10:21:41 【问题描述】:我可以从字符串列表中匹配一个字符串,如下所示:
keys = ['a', 'b', 'c']
for key in keys:
if re.search(key, line):
break
问题是我想匹配一个由正则表达式 + 我指定的字符串组成的模式。像这样的:
keys = ['a', 'b', 'c']
for key in keys:
if re.search('[^\[]'+key+'[^\]]', line):
break
但这不起作用(在本例中,我只想匹配出现在方括号中的“a”、“b”和“c”)。 我认为这与原始字符串等有关,但我找不到让它工作的方法。有什么建议吗?
编辑:
假设我想匹配一个稍微复杂一点的模式:
'[^\s*data\.'+key+'\s*=\s*\[(.+)[^\]]'
为了匹配括号中的数字:
data.a = [12343.232 ]
【问题讨论】:
然后使用re.search(r'\[]'.format(key), line)
。或if r'[]'.format(key) in line:
。见ideone.com/UimIyJ
"...如果它们出现在方括号中,我想匹配 [...]" 那你为什么要否定方括号?
如果我想匹配更复杂的东西怎么办?就像我所做的编辑一样
你的意思是什么编辑?请提供一个测试用例。
@IgnacioVazquez-Abrams 因为我只想匹配括号中的内容
【参考方案1】:
re.search('\['+re.escape(key)+']', line):
这将匹配[key]
。请注意,添加 re.escape
是为了防止 key
中的字符被解释为正则表达式。
【讨论】:
你不需要转义]
。
感谢您的提示,但是,您确定吗?如果 key=abc,那么正则表达式将是 '[abc]' 女巫匹配任何 a、b 或 c 怎么办?我在这里想念什么?
不,[
必须转义,]
不必。以上是关于python中的正则表达式:如何在模式中使用变量字符串? [复制]的主要内容,如果未能解决你的问题,请参考以下文章