如何同时根据句首和句尾两个条件拆分字符串?
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}[日月])
- 紧接着是零个或多个空格,然后是一个或两个数字,然后是 日
或 月
.
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']
我有一个字符串,
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}[日月])
- 紧接着是零个或多个空格,然后是一个或两个数字,然后是日
或月
.
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']