【问题标题】:Regular expression to find string with iterating letters on the end正则表达式查找末尾带有迭代字母的字符串
【发布时间】:2017-02-14 23:21:15
【问题描述】:

有人可以帮我进行这种正则表达式匹配吗?

例如,我正在搜索包含不同字符串的列表,并且在字符串末尾有一个迭代的字母:

  • 怪物A
  • 怪物B
  • 怪物C
  • HeroA
  • 英雄B
  • HeroC
  • ...

我需要这个脚本返回的只是字符串的前面部分,在这个例子中是 MonsterHero

【问题讨论】:

  • 贴一个示例列表,是逗号分隔,换行分隔吗?他们有秩序吗?此类字符串的末尾只能有一个字母?
  • 你绝对需要正则表达式吗?否则 word[:-1] 将起作用

标签: python regex string loops iterator


【解决方案1】:

您可以使用肯定的前瞻断言(?=...) 来检查单词以单个大写字符结尾,然后使用单词边界\b...\b 来确保它不匹配不是整个单词的模式:

>>> text = "This re will match MonsterA and HeroB but not heroC or MonsterCC"
>>> re.findall(r"\b[A-Z][a-z]+(?=[A-Z]\b)", text)
['Monster', 'Hero'] 

re.findall 在列表中返回所有此类匹配项。

【讨论】:

    【解决方案2】:

    如果你绝对需要一个正则表达式:

    re.match(r"(.*)[A-Z]", word).group(1)
    

    但如果你只想删除最后一个字符,这并不是最有效的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-25
      • 1970-01-01
      • 1970-01-01
      • 2013-10-30
      相关资源
      最近更新 更多