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中的正则表达式:如何在模式中使用变量字符串? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Python中正则表达式(re模块)的使用

如何在 Notepad++ 的 Python 脚本中将变量设置为正则表达式字符串?

python re模块

python re模块

JavaScript基础知识梳理----正则表达式

Python正则表达式