【问题标题】:How to code a regex pattern for multiple identical characters in python3?如何为python3中的多个相同字符编写正则表达式模式?
【发布时间】:2021-09-18 16:46:00
【问题描述】:

我有一长串如下形式:

joined_string = "ASOGHFFFFFFFFFFFFFFFFFFFGFIOSGFFFFFFFFURHDHREEKFFFFFFIIIEI..."

它是由连续的F 字母串穿插的随机字符串的串联:

ASOGH
FFFFFFFFFFFFFFFFFFF
GFIOSG
FFFFFFFF
URHDHREEK
FFFFFF
IIIEI

F的连续字母个数不固定,但会超过5个, 并假设五个F 字母不会连续出现在随机字符串中。

我想只提取随机字符串以获得以下列表:

random_strings = ['ASOGH', 'GFIOSG', 'URHDHREEK', 'IIIEI']

我想有一个简单的正则表达式可以解决这个任务:

random_strings = joined_string.split('WHAT_TO_TYPE_HERE?')

问题:如何为多个相同字符编写正则表达式模式?

【问题讨论】:

  • 这能回答你的问题吗? Split string based on regex
  • str.split 不能采用正则表达式,因此请使用 re 模块和模式 F+

标签: python python-3.x regex string split


【解决方案1】:

我会在这里使用正则表达式查找所有方法:

joined_string = "ASOGHFFFFFFFFFFFFFFFFFFFGFIOSGFFFFFFFFURHDHREEKFFFFFFIIIEI"
parts = re.findall(r'F{2,}|(?:[A-EG-Z]|F(?!F))+', joined_string)
print(parts)

打印出来:

['ASOGH', 'FFFFFFFFFFFFFFFFFFF', 'GFIOSG', 'FFFFFFFF', 'URHDHREEK', 'FFFFFF', 'IIIEI']

这里的正则表达式模式可以解释为:

F{2,}         match any group of 2 or more consecutive F's (first)
|             OR, that failing
(?:
    [A-EG-Z]  match any non F character
    |         OR
    F(?!F)    match a single F (not followed by an F)
)+            all of these, one or more times

【讨论】:

    【解决方案2】:

    您可以使用F{5,} 进行拆分并将其保存在捕获组中,以便拆分文本也是结果的一部分:

    import re
    s = "ASOGHFFFFFFFFFFFFFFFFFFFGFIOSGFFFFFFFFURHDHREEKFFFFFFIIIEI"
    print( re.split(r'(F{5,})', s) )
    

    输出:

    ['ASOGH', 'FFFFFFFFFFFFFFFFFFF', 'GFIOSG', 'FFFFFFFF', 'URHDHREEK', 'FFFFFF', 'IIIEI']

    【讨论】:

      【解决方案3】:

      我会使用re.split 来完成这项任务

      import re
      joined_string = "ASOGHFFFFFFFFFFFFFFFFFFFGFIOSGFFFFFFFFURHDHREEKFFFFFFIIIEI"
      parts = re.split('F{5,}',joined_string)
      print(parts)
      

      输出

      ['ASOGH', 'GFIOSG', 'URHDHREEK', 'IIIEI']
      

      F{5,}表示5个或更多F

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-09
        • 1970-01-01
        • 2020-11-06
        • 1970-01-01
        • 1970-01-01
        • 2015-07-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多