如何解决python重新分割所有空格和标点符号,撇号除外
我想用除撇号之外的所有空格和标点符号来分割字符串。最好仍然使用单引号作为分隔符,除非它是撇号。我也想保留分隔符。
示例字符串words = """hello my name is 'joe.' what's your's"""
这是我到目前为止的重新模式splitted = re.split(r"[^'-\w]",words.lower())
我尝试在 ^ 字符后抛出单引号,但它不起作用。
我想要的输出是这个。 splitted = [hello,my,name,is,joe,.,what's,your's]
解决方法
在拆分后简单地处理您的列表可能更简单,而不首先考虑它们:
>>> words = """hello my name is 'joe.' what's your's"""
>>> split_words = re.split(r"[,.!?]",words.lower()) # add punctuation you want to split on
>>> split_words
['hello','my','name','is',"'joe.'","what's","your's"]
>>> [word.strip("'") for word in split_words]
['hello','joe.',"your's"]
,
一种选择是利用环视在所需位置进行拆分,并使用捕获组来保留拆分中的内容。
拆分后,您可以从结果列表中删除空条目。
\s+|(?<=\s)'|'(?=\s)|(?<=\w)([,.!?])
模式匹配
-
\s+
匹配 1 个或多个空白字符 -
|
或 -
(?<=\s)'
匹配以空格字符开头的'
-
|
或 -
'(?=\s)
后跟空格字符时匹配'
-
|
或 -
(?<=\w)([,.!?])
捕获第 1 组中的,
.
!
?
之一,如果前面有单词字符
看到一个 regex demo 和一个 Python demo。
示例
import re
pattern = r"\s+|(?<=\s)'|'(?=\s)|(?<=\w)([,.!?])"
words = """hello my name is 'joe.' what's your's"""
result = [s for s in re.split(pattern,words) if s]
print(result)
输出
['hello','joe','.',"your's"]
,
我喜欢正则表达式高尔夫!
words = """hello my name is 'joe.' what's your's"""
splitted = re.findall(r"\b(?:\w'\w|\w)+\b",words)
括号中的部分是一个匹配被字母包围的撇号或单个字母的组。
编辑:
这更灵活:
re.findall(r"\b(?:(?<=\w)'(?=\w)|\w)+\b",words)
虽然此时有点难以理解,但实际上您应该使用伍德福德的答案。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。