Python:在正则表达式中使用变量值?

时间:2013-09-07 22:21:42

标签: python regex expression

我正在搜索一个字符串,并返回至少n个字符长的匹配,以“hi”开头,以“bye”结尾。

我们说n = 10str = "himalayashibye"

我想这样做:

stringFinder = re.findall("hi.{n-5}*bye",str)

(我从n中减去5,因为hi和bye已经组成了n个字符中的5个。)

然而,这似乎不起作用。

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

字符串表单(上面的注释地址)已被使用。所以继续它,例如:

"hi.{%d}*bye" % (n - 5)

然而请注意,这仍然会产生一些不太正确的事情,并且n = 10导致:

"hi.{5}*bye"

这不太正确,因为.{5}*表示“匹配5个组(.{5})”0次或更多次(所以0,5,10,15 ..)。 不会像hi1234567bye 那样匹配这些边界上的许多单词。这不匹配,因为1234567不是5组的倍数。

相反,请考虑.{5,}哪个“匹配至少5次”并且只接受超过hi12345bye的字词。

答案 1 :(得分:0)

我主要同意user2246674,虽然最初的问题是“至少n个字符长”。因此必须使用.{5,}

>>> import re
>>> n = 10
>>> pat = r"hi.{%d,}bye"%(n-5)
>>> pat
'hi.{5,}bye'
>>> s = "himalayashibye"
>>> re.findall(pat, s)
['himalayashibye']
>>>