我目前正在用python编写程序,我必须弄清楚像:)
,:(
,:-)
,:-(
这样的笑脸,如果后面跟着特殊字符和标点符号应以这种模式替换:
例如:Hi, this is good :)#
应该替换为Hi, this is good :)
。
我已经为其创建了正则表达式模式,但是无法在我的:-)
中包含这个笑脸re.compile
。它认为这是一个范围。
re.sub(r"[^a-zA-Z0-9:):D)]+", " " , words)
正常运行
我需要在正则表达式中添加:-)
笑脸。
答案 0 :(得分:1)
一种方法是使用以下模式:
(:\)|:\(|:-\)|:-\()[^A-Za-z0-9]+
此匹配 并捕获笑脸,然后立即匹配任意数量的非字母数字字符。替换只是捕获的笑脸,从而删除了非字母字符。
input = "Hi, this is good :)#"
output = re.sub(r"(:\)|:\(|:-\)|:-\()[^A-Za-z0-9]+", "\1" , input)
print(output)
Hi, this is good :)
答案 1 :(得分:1)
[^a-zA-Z0-9:):D)]
模式是错误的,因为它是用于匹配字符序列的字符类。您需要为此正则表达式添加一个与char序列匹配的替代方法。
要删除标点符号列表以外的其他标点符号
re.sub(r"(:-?[()D])|[^A-Za-z0-9\s]", r"\1" , s)
或者,在Python 3.4及更高版本中,由于the re.sub
bug:
re.sub(r"(:-?[()D])|[^A-Za-z0-9,\s]", lambda x: x.group(1) if x.group(1) else "", s)
如果确实需要避免删除逗号,请在否定的字符类中添加,
:
re.sub(r"(:-?[()D])|[^A-Za-z0-9,\s]", r"\1" , s)
^
请参见regex demo。
详细信息
(:-?[()D])
-将:
,然后是可选的-
,然后是来自字符类(
,{{1 }}或)
(捕获D
,:-)
,:-(
,:)
,:(
,:-D
之类的笑脸) :D
-匹配除ASCII字母,数字,逗号和空格之外的任何字符。要使其完全了解Unicode,请替换为[^A-Za-z0-9,\s]
。请参见Python 3.5+ demo:
(?:[^\w\s,]|_)
import re
s = "Hi, this is good :)#"
print( re.sub(r"(:-?[()D])|[^A-Za-z0-9,\s]", r"\1" , s) )
# => Hi, this is good :)
答案 2 :(得分:0)
您可以尝试\
来转义特殊字符:
re.sub("[^a-zA-Z0-9:):D:\-))]+", " " , words)