【问题标题】:Pattern Match a string for atleast two consecutive alphabets anywhere in the string模式匹配字符串中任意位置的至少两个连续字母
【发布时间】:2011-12-28 15:18:52
【问题描述】:

在我的 python 代码中,我想对字符串中任意位置的至少两个连续字母进行模式匹配。

我用过,re.match(r'([a-zA-Z][a-zA-Z])+',str)

这匹配一个字符串,例如 'abc',但不匹配 '1abc'。我的正则表达式有什么错误?

请帮忙 谢谢你

【问题讨论】:

  • “字母”是什么意思?
  • 如果我错了,请纠正我,但你的意思是必须订购?如,如果字符串是 bca?,正则表达式不应该匹配
  • 它应该匹配 bca。我只想检查字符串中任何位置是否存在至少两个连续的字母。字母表是指大写或小写的 a 到 z 字符。

标签: python regex


【解决方案1】:

match 方法仅从字符串的开头查找。你应该改用search

您的正则表达式也可以匹配偶数个字符。

re.search(r'([a-zA-Z][a-zA-Z]+)',str)

【讨论】:

  • 更好的正则表达式是"[A-Za-z]{2}"。为什么要让正则表达式引擎比必要的更忙?一旦找到两个字母,条件就为真。但我仍然 +1 以抵消不应有的反对票。
【解决方案2】:

我不太明白您想要什么,但从提供的示例中可以看出您误解了 re.match 的作用。请参阅 python 的 re 模块上的文档中的search() vs. match()

【讨论】:

    【解决方案3】:

    回答更新后的问题:

    re.search(r'[a-zA-Z]{2,}', str)
    

    或者如果你想要所有的字母数字字符(包括下划线),就像这样:

    re.search(r'\w{2,}', str)
    

    真正只匹配字母数字:

    re.search(r'[a-zA-Z0-9]{2,}', str)
    

    如果您希望匹配出现在字符串中的任何位置,而不仅仅是在开头,re.search 可能会对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2013-03-01
      • 2022-11-16
      • 2012-09-28
      • 1970-01-01
      • 2015-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多