如何同时根据句首和句尾两个条件拆分字符串?

How to split string according to two conditions at the beginning and end of a sentence simultaneously?

我有一个字符串,

str1 = "ZZZ。10月,AAA。11月2日,BBB。CCC。3日,DDD。EEE。12月,FFF"

我想按两个条件拆分这个字符串:出现在字符串的开头,同时句点出现在字符串的结尾.因此,结果应该是,

# ZZZ。 / 10月,AAA。/ 11月2日,BBB。CCC。/3日,DDD。EEE。/12月,FFF

而现在,我的想法是先按句点拆分,然后按照第二条规则()组合每一个,代码可以是运行 喜欢,

import re
str1 = "ZZZ。10月,AAA。11月2日,BBB。CCC。3日,DDD。EEE。12月,FFF"

for i, item in enumerate(re.split(r'(?<=。)',str1)):
    if i == 0:
        cache = item 
    else:
        if re.match(r'(^.{0,2}日)|(^.{0,2}月)', item):
            res.append(cache)
            cache = item
        else:
            cache += item  
res.append(cache)      
print(res)

但我想知道有没有这种格式的东西: re.match(r'(^.{0,2}日)|(^.{0,2}月)', item) and re.match(r'。$', item) 可以直接在一个循环或一些简单的正则表达式中吗?

您可以将 re.split

一起使用
(?<=。)(?=\s*\d{1,2}[日月])

regex demo详情:

  • (?<=。) - 匹配点后的位置
  • (?=\s*\d{1,2}[日月]) - 紧接着是零个或多个空格,然后是一个或两个数字,然后是 .

Python demo:

import re
text = "ZZZ。10月,AAA。11月2日,BBB。CCC。3日,DDD。EEE。12月,FFF"
print( re.split(r'(?<=。)(?=\s*\d{1,2}[日月])', text) )
# => ['ZZZ。', '10月,AAA。', '11月2日,BBB。CCC。', '3日,DDD。EEE。', '12月,FFF']