【问题标题】:regex in python: how to use variable string in pattern? [duplicate]python中的正则表达式:如何在模式中使用变量字符串? [复制]
【发布时间】: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 因为我只想匹配括号中的内容

标签: python regex


【解决方案1】:
re.search('\['+re.escape(key)+']', line):

这将匹配[key]。请注意,添加 re.escape 是为了防止 key 中的字符被解释为正则表达式。

【讨论】:

  • 你不需要转义]
  • 感谢您的提示,但是,您确定吗?如果 key=abc,那么正则表达式将是 '[abc]' 女巫匹配任何 a、b 或 c 怎么办?我在这里想念什么?
  • 不,[ 必须转义,] 不必。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-11
  • 2019-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-01
  • 2022-01-22
相关资源
最近更新 更多