Python:在正则表达式中使用变量值? [复制]
Posted
技术标签:
【中文标题】Python:在正则表达式中使用变量值? [复制]【英文标题】:Python: Using variable values in regular expressions? [duplicate] 【发布时间】:2013-09-11 18:36:55 【问题描述】:我正在搜索一个字符串并返回至少有 n 个字符长且以“hi”开头并以“bye”结尾的匹配项。
假设n = 10
和str = "himalayashibye"
。
我想做:
stringFinder = re.findall("hi.n-5*bye",str)
(我从 n 中减去 5,因为 hi 和 bye 已经构成了 n 个字符中的五个。)
但是,这似乎不起作用。
有什么建议吗?
【问题讨论】:
抱歉重复,感谢您的参考。这回答了我的问题! 即使你的语法正确,也不会返回你想要的。我相信它会返回整个字符串而不是“hi”和“bye”的实例。你可能想要re.match
【参考方案1】:
字符串形式(上面的注释地址)已被使用。所以继续它,例如:
"hi.%d*bye" % (n - 5)
但是请注意,这仍然会产生一些不太正确的结果,并且使用 n = 10
会导致:
"hi.5*bye"
这不太对,因为.5*
的意思是“匹配 5 个 (.5
) 的组”0 次或更多次(所以 0、5、10、15 ..)。有许多词不在这些边界上,不会匹配,例如hi1234567bye
。这不匹配,因为1234567
不是 5 组的倍数。
相反,请考虑.5,
,它将“匹配至少 5 次”并且只接受比 hi12345bye
更长的词。
【讨论】:
我认为 OP 至少需要 5 个所以应该是5,
@Cfreak 我同意(重新阅读后),编辑了答案。谢谢。【参考方案2】:
我基本同意 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']
>>>
【讨论】:
以上是关于Python:在正则表达式中使用变量值? [复制]的主要内容,如果未能解决你的问题,请参考以下文章