0

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

让我们说n = 10str = "himalayashibye"

我想要做:

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

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

但是,这似乎不起作用。

有什么建议么?

4

2 回答 2

0

字符串形式(上面的评论地址)已被使用。所以继续它,例如:

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

但是请注意,这仍然会产生一些不太正确的n = 10结果,并且会导致:

"hi.{5}*bye"

这不太正确,因为.{5}*意味着“匹配 5 ( .{5}) 组”0 次或更多次(因此 0、5、10、15 ..)。有很多不在这些边界上的单词匹配 like hi1234567bye。这不匹配,因为1234567不是 5 组的倍数。

相反,考虑.{5,}哪个将“匹配至少 5 次”并且只接受长于hi12345bye.

于 2013-09-07T22:32:42.977 回答
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']
>>> 
于 2013-09-07T22:44:39.273 回答