python在字符前重新分割字符串

时间:2010-11-04 06:31:50

标签: python regex split

如何在字符前的位置拆分字符串?

  • 在'a'
  • 之前拆分字符串
  • 输入:“fffagggahhh”
  • 输出:[“fff”,“aggg”,“ahhh”]

显而易见的方法不起作用:

>>> h=re.compile("(?=a)")

>>> h.split("fffagggahhh")

['fffagggahhh']

>>>

7 个答案:

答案 0 :(得分:20)

好的,不完全是你想要的解决方案,但我认为这将是一个有用的问题补充。

  

无需重新解决方案

没有重新:

>>> x = "fffagggahhh"
>>> k = x.split('a')
>>> j = [k[0]] + ['a'+l for l in k[1:]]
>>> j
['fff', 'aggg', 'ahhh']
>>> 

答案 1 :(得分:4)

>>> rx = re.compile("(?:a|^)[^a]*")
>>> rx.findall("fffagggahhh")
['fff', 'aggg', 'ahhh']
>>> rx.findall("aaa")
['a', 'a', 'a']
>>> rx.findall("fgh")
['fgh']
>>> rx.findall("")
['']

答案 2 :(得分:3)

>>> r=re.compile("(a?[^a]+)")
>>> r.findall("fffagggahhh")
['fff', 'aggg', 'ahhh']

编辑:

这将无法在字符串中正确处理双a

>>> r.findall("fffagggaahhh")
['fff', 'aggg', 'ahhh']

KennyTM似乎更适合。

答案 3 :(得分:2)

import re

def split_before(pattern,text):
    prev = 0
    for m in re.finditer(pattern,text):
        yield text[prev:m.start()]
        prev = m.start()
    yield text[prev:]


if __name__ == '__main__':
    print list(split_before("a","fffagggahhh"))

re.split将模式视为分隔符。

>>> print list(split_before("a","afffagggahhhaab"))
['', 'afff', 'aggg', 'ahhh', 'a', 'ab']
>>> print list(split_before("a","ffaabcaaa"))
['ff', 'a', 'abc', 'a', 'a', 'a']
>>> print list(split_before("a","aaaaa"))
['', 'a', 'a', 'a', 'a', 'a']
>>> print list(split_before("a","bbbb"))
['bbbb']
>>> print list(split_before("a",""))
['']

答案 4 :(得分:0)

这个适用于重复a

  >>> re.findall("a[^a]*|^[^a]*", "aaaaa")
  ['a', 'a', 'a', 'a', 'a']
  >>> re.findall("a[^a]*|[^a]+", "ffaabcaaa")
  ['ff', 'a', 'abc', 'a', 'a', 'a']

方法:您要查找的主要块是a,后跟零或更多不是 - a。这涵盖了除零或更多之外的所有可能性 - a。这只能在输入字符串的开头发生。

答案 5 :(得分:-1)

>>> foo = "abbcaaaabbbbcaaab"
>>> bar = foo.split("c")
>>> baz = [bar[0]] + ["c"+x for x in bar[1:]]
>>> baz
['abb', 'caaaabbbb', 'caaab']

由于切片有效,即使c中没有出现foo,这也会正常工作。

答案 6 :(得分:-3)

split()接受角色分裂的参数:

>>> "fffagggahhh".split('a')
['fff', 'ggg', 'hhh']