如果我有sentence = 'There is light!'
这句话并且我要将这句话与mysentence = sentence.split()
分开,那么我如何将'There, is, light, !'
作为print(mysentence)
的输出?我特别想要做的是分割句子,包括所有标点符号,或者只是选择标点符号的列表。我得到了一些代码,但程序正在识别单词中的字符,而不是单词。
out = "".join(c for c in punct1 if c not in ('!','.',':'))
out2 = "".join(c for c in punct2 if c not in ('!','.',':'))
out3 = "".join(c for c in punct3 if c not in ('!','.',':'))
如何在不识别单词中的每个字符的情况下使用它,而不是识别单词本身。因此,"Hello how are you?"
的输出应该变为"Hello, how, are, you, ?"
任何方式执行此操作
答案 0 :(得分:2)
您可以使用\w+|[^\w\s]+
正则表达式与re.findall
来获取这些块:
\w+|[^\w\s]
请参阅regex demo
模式详情:
\w+
- 一个或多个单词字符(字母,数字或下划线)|
- 或[^\w\s]
- 除了word / whitespace之外的1个字符import re
p = re.compile(r'\w+|[^\w\s]')
s = "There is light!"
print(p.findall(s))
注意:如果您想将下划线视为标点符号,则需要使用类似[a-zA-Z0-9]+|[^A-Za-z0-9\s]
模式的内容。
更新(评论后)
要确保您将撇号作为字词的一部分进行匹配,请将(?:'\w+)*
或(?:'\w+)?
添加到上述模式中的\w+
:
import re
p = re.compile(r"\w+(?:'\w+)*|[^\w\s]")
s = "There is light!? I'm a human"
print(p.findall(s))
请参阅updated demo
(?:'\w+)*
匹配零或更多(*
,如果您使用?
,则会匹配1或0)撇号后跟1个字符。