Python 在字符串中查找特殊字符smiley
我目前正在用python编写一个程序,在这个程序中,我必须找出如下笑脸:Python 在字符串中查找特殊字符smiley,python,regex,Python,Regex,我目前正在用python编写一个程序,在这个程序中,我必须找出如下笑脸::),:(,:-),:-()如果后跟特殊字符,则应替换它,并且在这种模式中应替换标点: 例如:Hi,这很好:)应该替换为Hi,这很好:) 我已经为sub-it创建了正则表达式模式,但无法将此笑脸包含在我的重新编译中。它正在考虑将其作为一个范围 re.sub(r“[^a-zA-Z0-9:):D)]+,”,单词) 我需要将:-)smiley添加到正则表达式中。您可以使用\对特殊字符进行转义,请尝试: re.sub("[^a-zA
:)
,:(
,:-)
,:-(
)如果后跟特殊字符,则应替换它,并且在这种模式中应替换标点:
例如:Hi,这很好:)
应该替换为Hi,这很好:)
我已经为sub-it创建了正则表达式模式,但无法将此笑脸包含在我的重新编译中。它正在考虑将其作为一个范围
re.sub(r“[^a-zA-Z0-9:):D)]+,”,单词)
我需要将:-)
smiley添加到正则表达式中。您可以使用\
对特殊字符进行转义,请尝试:
re.sub("[^a-zA-Z0-9:):D:\-))]+", " " , words)
一种方法是使用以下模式:
(:\)|:\(|:-\)|:-\()[^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 :)
[^a-zA-Z0-9:):D)]
模式是错误的,因为它是用于匹配字符序列的字符类。您需要在此正则表达式中添加一个与字符序列匹配的替代项
要删除除特定笑脸列表之外的任何标点符号,您可以使用
re.sub(r"(:-?[()D])|[^A-Za-z0-9\s]", r"\1" , s)
或者,在Python 3.4及更早版本中,由于以下原因:
如果确实需要避免删除逗号,请将,
添加到求反字符类中:
re.sub(r"(:-?[()D])|[^A-Za-z0-9,\s]", r"\1" , s)
^
看
详细信息
(:-?[()D])
-匹配并捕获到组1 a:
,然后是可选的-
,然后是字符类中的单个字符:(
,)
或D
(这捕获了类似于:-)
,:-(,)
,,,,,,,,,,,,,,,)
[^A-Za-z0-9\s]
-匹配除ASCII字母、数字、逗号和空格以外的任何字符。要使其完全支持Unicode,请替换为(?:[^\w\s,]|)
见:
见:
请提供演示和解释。请注意,模式的主要问题是它包含一个字符类,您在其中添加了一系列要匹配的模式,但它不是这样工作的。你需要在这里分组。这不是无耻地推广我的答案,但你也可以检查我的答案,看看它是否对你有用。@WiktorStribiżew它工作得很好!但是Python2中的同一个正则表达式模式抛出了一个错误。这是一个完美的正则表达式模式,它应该只识别smileys,而不是“)”和“:”。Python2在使用该正则表达式模式时抛出了一个错误。它将仅在Python3上工作?@noobster是的,它不会在Python3.5之前的任何python上工作,因为该问题已经解决。请使用早期版本。@诺贝斯特很高兴它能起作用,请考虑接受这个答案。
re.sub(r"(:-?[()D])|[^A-Za-z0-9,\s]", r"\1" , 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 :)
import re
s = "Hi, this is good :)#"
print( re.sub(r"(:-?[()D])|[^A-Za-z0-9,\s]", lambda x: x.group(1) if x.group(1) else "", s) )
# => Hi, this is good :)