我正在搜索一个字符串并返回至少有 n 个字符长并以“hi”开头并以“bye”结尾的匹配项。
让我们说n = 10
和str = "himalayashibye"
。
我想要做:
stringFinder = re.findall("hi.{n-5}*bye",str)
(我从 n 中减去 5,因为 hi 和 bye 已经构成了 n 个字符中的 5 个。)
但是,这似乎不起作用。
有什么建议么?
我正在搜索一个字符串并返回至少有 n 个字符长并以“hi”开头并以“bye”结尾的匹配项。
让我们说n = 10
和str = "himalayashibye"
。
我想要做:
stringFinder = re.findall("hi.{n-5}*bye",str)
(我从 n 中减去 5,因为 hi 和 bye 已经构成了 n 个字符中的 5 个。)
但是,这似乎不起作用。
有什么建议么?
字符串形式(上面的评论地址)已被使用。所以继续它,例如:
"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
.
我大多同意 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']
>>>