我有这段代码用于删除正则表达式字符串中的所有标点符号:
import regex as re
re.sub(ur"\p{P}+", "", txt)
如何更改它以允许连字符?如果你能解释一下你是怎么做到的,那就太好了。我明白在这里,如果我错了,请纠正我,在标点后加上任何东西。
答案 0 :(得分:22)
[^\P{P}-]+
\P
是\p
的补充 - 不是标点符号。所以这匹配不(不是标点符号或破折号)的任何内容 - 导致除破折号之外的所有标点符号。
示例:http://www.rubular.com/r/JsdNM3nFJ3
如果你想要一种非复杂的方式,另一种选择是\p{P}(?<!-)
:匹配所有标点符号,然后检查它不是破折号(使用负向后观)。
工作示例:http://www.rubular.com/r/5G62iSYTdk
答案 1 :(得分:14)
以下是re
模块的使用方法,以防您必须坚持使用标准库:
# works in python 2 and 3
import re
import string
remove = string.punctuation
remove = remove.replace("-", "") # don't remove hyphens
pattern = r"[{}]".format(remove) # create the pattern
txt = ")*^%{}[]thi's - is - @@#!a !%%!!%- test."
re.sub(pattern, "", txt)
# >>> 'this - is - a - test'
如果效果很重要,您可能需要使用str.translate
,因为it's faster than using a regex。在Python 3中,代码为txt.translate({ord(char): None for char in remove})
。
答案 2 :(得分:0)
您可以指定要手动删除的标点符号,如[._,]
或提供函数而不是替换字符串:
re.sub(r"\p{P}", lambda m: "-" if m.group(0) == "-" else "", text)