【问题标题】:Using variable in regular expression in Python [duplicate]在Python的正则表达式中使用变量[重复]
【发布时间】:2013-06-17 14:15:08
【问题描述】:

我查看了几篇帖子和其他论坛以找到与我的问题相关的答案,但没有针对我的需要提出具体的答案。提醒一下,我是编程新手,不具备大多数人应该具备的基本基础。

我知道 bash、小 python,并且对 RE 很了解。

我正在尝试创建一个 python 脚本,使用 RE 解析数据并给我一个我需要/想要的输出。

我的输出将包含 4 个值,所有值都来自一行。正在读入的行被扔在一起,没有定义分隔符。 (因此我的程序的原因)

为了找到 4 个值之一,我不得不说寻找 123- 并在此之后给我一切,但在此停止 df5123- 不是常量,而是由有效的正则表达式定义的,df5 也是如此。我将两个 RE 分配给一个变量。我如何使用这些变量在两者之间找到我想要的东西......如果这有意义,请告诉我。

【问题讨论】:

标签: python regex variables


【解决方案1】:

模式"%s(.*?)%s" % (oneTwoThree, dF5)怎么样?然后您可以对该模式进行重新搜索并在结果上使用组函数。

有点意思

pattern = "%s(.*?)%s" % (oneTwoThree, dF5) matches = re.search(pattern, text) if matches: print matches.groups()

如果使用re.findall代替re.search,可以省去对匹配进行分组的麻烦。

【讨论】:

  • 123-部分不是一个常数值,我用一个变量定义了它(通过正则表达式)。我想使用该变量来定义起点并使用 df5 作为终点。只有介于两者之间的,才是我想要的。我这样做很难吗?
  • 这就是我建议 "%s(.*?)%s" % (oneTwoThree, dF5) 的原因。在这里, oneTwoThree 和 df5 是您的变量,可能包含“123-”或“df5”字符串。因此,在 re.compile 中,您可以使用该行而不是硬编码字符串。我现在在我的答案中编辑了相同的内容。
【解决方案2】:
import re
start = '123-'
stop = 'df5'
regex = re.compile('{0}(.*?){1}'.format(re.escape(start), re.escape(stop)))

请注意,对于这些示例字符串,re.escape() 调用不是必需的,但如果您的分隔符可以在正则表达式中包含具有特殊含义的字符(.*+、@ 987654326@等)。

【讨论】:

  • 123-部分不是一个常数值,我用一个变量定义了它(通过正则表达式)。我想使用该变量来定义起点并使用 df5 作为终点。只有介于两者之间的,才是我想要的。我这样做很难吗?
  • 最后一行展示了如何使用两个变量startstop 创建一个正则表达式,这两个变量可以是任何字符串。将 startstop 替换为您的实际变量的名称,我只是在代码中使用您的示例字符串来说明它的作用。
猜你喜欢
  • 2011-08-19
  • 1970-01-01
  • 2015-01-21
  • 1970-01-01
  • 2017-11-04
  • 2014-01-06
  • 2013-09-11
  • 1970-01-01
相关资源
最近更新 更多