在Python的正则表达式中使用变量[重复]

Posted

技术标签:

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

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

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

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

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

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

【问题讨论】:

使用str.format()。此处的示例:***.com/questions/1875676/… 和 ***.com/questions/4199642/… 另外,请向我们展示您的代码! 【参考方案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 替换为您的实际变量的名称,我只是在代码中使用您的示例字符串来说明它的作用。

以上是关于在Python的正则表达式中使用变量[重复]的主要内容,如果未能解决你的问题,请参考以下文章

python 正则表达式

如何在正则表达式中包含变量[重复]

Python 正则表达式 findall 有效,但匹配不 [重复]

在 Python 脚本中使用正则表达式 [重复]

python使用正则表达式去除句子中的重复词

Perl正则表达式选项存储在变量中[重复]