【问题标题】:Python: Using variable values in regular expressions? [duplicate]Python:在正则表达式中使用变量值? [复制]
【发布时间】:2013-09-11 18:36:55
【问题描述】:

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

假设n = 10str = "himalayashibye"

我想做:

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

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

但是,这似乎不起作用。

有什么建议吗?

【问题讨论】:

  • 抱歉重复,感谢您的参考。这回答了我的问题!
  • 即使你的语法正确,也不会返回你想要的。我相信它会返回整个字符串而不是“hi”和“bye”的实例。你可能想要re.match

标签: python regex expression


【解决方案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']
>>> 

【讨论】:

    猜你喜欢
    • 2011-08-19
    • 2013-06-17
    • 2019-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多