用正则表达式切割一个字符串

时间:2018-02-24 15:10:33

标签: regex python-3.x

所以我想按空格分割一个字符串,除非该部分字符串是感叹号。

样品:

ABC DEF !GHI JKL MNO! PQR

会变成:

["ABC", "DEF", "GHI JKL MNO", "PQR"]

目前,这是我的正则表达式(我使用regex101.com进行了检查并且它有效)

[^\s]*![^!]*![^\s]*|[^\s!!]+

我的拆分代码是

sample = "ABC DEF !GHI JKL MNO! PQR"
print(sample.split(r"[^\s]*![^!]*![^\s]*|[^\s!!]+").strip("!"))

2 个答案:

答案 0 :(得分:3)

您可以使用

匹配预期的子字符串
res = re.findall(r'![^!]*!|\S+', s)

请参阅regex demo

<强>详情

  • ![^!]*! - 匹配!,然后匹配!以外的任何0 +字符,再次匹配!
  • | - 或
  • \S+ - 1 +非空白字符。

Python demo

import re
rx = r"![^!]*!|\S+"
s = "ABC DEF !GHI JKL MNO! PQR"
print(re.findall(rx, s))
# => ['ABC', 'DEF', '!GHI JKL MNO!', 'PQR']

答案 1 :(得分:1)

我会这样做:

def splitIt(sample):
    exclamation = False
    result = []
    for i in sample:
        if i == " ":
            if exclamation == False:
                result.append("")
            else:
                pass
        elif i == "!":
            if not exclamation:
                exclamation = True
            else:
                exclamation = False
        else:
            result[-1] += i
    return result