您可以使用字符串函数代替正则表达式:
to_be_removed = ".,:!" # all characters to be removed
s = "John's mom went there, but he wasn't there. So she said: 'Where are you!!'"
for c in to_be_removed:
s = s.replace(c, '')
s.split()
但是,在您的示例中,您不想删除撇号,John's
但您希望将其删除you!!'
。所以字符串操作在这一点上失败了,你需要一个微调的正则表达式。
编辑:可能一个简单的正则表达式可以解决您的问题:
(\w[\w']*)
它将捕获所有以字母开头的字符并继续捕获,而下一个字符是撇号或字母。
(\w[\w']*\w)
这第二个正则表达式是针对一个非常具体的情况......第一个正则表达式可以捕获像you'
. 这将避免这种情况,并且仅在 is 在单词内(不在开头或结尾)时才捕获撇号。但是在那一点上,出现了一种情况,您无法Moss' mom
使用第二个正则表达式捕获撇号。您必须决定是否在以 wit 结尾并定义所有权的名称中捕获尾随撇号。
例子:
rgx = re.compile("([\w][\w']*\w)")
s = "John's mom went there, but he wasn't there. So she said: 'Where are you!!'"
rgx.findall(s)
["John's", 'mom', 'went', 'there', 'but', 'he', "wasn't", 'there', 'So', 'she', 'said', 'Where', 'are', 'you']
更新 2:我在我的正则表达式中发现了一个错误!它不能捕获单个字母后跟撇号之类的A'
。固定的全新正则表达式在这里:
(\w[\w']*\w|\w)
rgx = re.compile("(\w[\w']*\w|\w)")
s = "John's mom went there, but he wasn't there. So she said: 'Where are you!!' 'A a'"
rgx.findall(s)
["John's", 'mom', 'went', 'there', 'but', 'he', "wasn't", 'there', 'So', 'she', 'said', 'Where', 'are', 'you', 'A', 'a']