如何在 python 中执行条件拆分
how can I perform conditional splitting with exceptions in python
我想将字符串拆分成句子。
但也有一些出乎我意料之外的例外情况:
str = "Text... Text. Text! Text? UPPERCASE.UPPERCASE. Name. Text."
所需拆分:
split = ['Text...', 'Text.', 'Text!', 'Text?', 'UPPERCASE.UPPERCASE. Name.', 'Text.']
如何使用正则表达式 python
到目前为止我的努力,
str = "Text... Text. Text! Text? UPPERCASE.UPPERCASE. Name. Text."
split = re.split('(?<=[.|?|!|...])\s', str)
print(split)
我得到了:
['Text...', 'Text.', 'Text!', 'Text?', 'UPPERCASE.UPPERCASE.', 'Name.', 'Text.']
预计:
['UPPERCASE.UPPERCASE. Name.']
[A-Z]+\. Name
中的\s
不拆分
你可以使用
(?<=[.?!])(?<![A-Z]\.(?=\s+Name))\s+
见regex demo。详情:
(?<=[.?!])
- 正后视需要 .
、?
或 !
紧邻当前位置 的左侧
(?<![A-Z]\.(?=\s+Name))
- 如果有一个大写字母和一个 .
后跟 1+ 个空格 + Name
紧跟在当前位置的左侧,则匹配失败的负后视(注意 +
在 前瞻 中使用,这就是为什么它在前瞻中与 Python re
和 \s+
一起使用有必要检查 Name
空格后的存在,它将与下面的下一个 \s+
模式匹配和消耗)
\s+
- 一个或多个空白字符。
参见 Python demo:
import re
text = "Text... Text. Text! Text? UPPERCASE.UPPERCASE. Name. Text."
print(re.split(r'(?<=[.?!])(?<![A-Z]\.(?=\s+Name))\s+', text))
# => ['Text...', 'Text.', 'Text!', 'Text?', 'UPPERCASE.UPPERCASE. Name.', 'Text.']
我想将字符串拆分成句子。
但也有一些出乎我意料之外的例外情况:
str = "Text... Text. Text! Text? UPPERCASE.UPPERCASE. Name. Text."
所需拆分:
split = ['Text...', 'Text.', 'Text!', 'Text?', 'UPPERCASE.UPPERCASE. Name.', 'Text.']
如何使用正则表达式 python
到目前为止我的努力,
str = "Text... Text. Text! Text? UPPERCASE.UPPERCASE. Name. Text."
split = re.split('(?<=[.|?|!|...])\s', str)
print(split)
我得到了:
['Text...', 'Text.', 'Text!', 'Text?', 'UPPERCASE.UPPERCASE.', 'Name.', 'Text.']
预计:
['UPPERCASE.UPPERCASE. Name.']
[A-Z]+\. Name
中的\s
不拆分
你可以使用
(?<=[.?!])(?<![A-Z]\.(?=\s+Name))\s+
见regex demo。详情:
(?<=[.?!])
- 正后视需要.
、?
或!
紧邻当前位置 的左侧
(?<![A-Z]\.(?=\s+Name))
- 如果有一个大写字母和一个.
后跟 1+ 个空格 +Name
紧跟在当前位置的左侧,则匹配失败的负后视(注意+
在 前瞻 中使用,这就是为什么它在前瞻中与 Pythonre
和\s+
一起使用有必要检查Name
空格后的存在,它将与下面的下一个\s+
模式匹配和消耗)\s+
- 一个或多个空白字符。
参见 Python demo:
import re
text = "Text... Text. Text! Text? UPPERCASE.UPPERCASE. Name. Text."
print(re.split(r'(?<=[.?!])(?<![A-Z]\.(?=\s+Name))\s+', text))
# => ['Text...', 'Text.', 'Text!', 'Text?', 'UPPERCASE.UPPERCASE. Name.', 'Text.']