【问题标题】:Regular Expression - character class for special characters正则表达式 - 特殊字符的字符类
【发布时间】:2017-08-14 14:50:39
【问题描述】:

我需要在 Python 中编写一个正则表达式来捕获一些可能包含任何特殊字符(如!@#$%^)的文本。是否有类似于 [\w] 或 [\d] 的字符类可以捕获任何特殊字符?

我可以在我的正则表达式中写下所有的特殊字符,但它最终看起来不可读。任何帮助表示赞赏。

【问题讨论】:

  • 特殊字符?这很模糊。
  • 你检查过this吗?

标签: python regex


【解决方案1】:

特殊字母字符

Python 3

如果您使用的是 Python3,则可能无需执行任何操作。 \w 已经包含了很多“特殊字符”:

>>> import re
>>> re.findall('\w', 'üäößéÅßêèiìí')
['ü', 'ä', 'ö', 'ß', 'é', 'Å', 'ß', 'ê', 'è', 'i', 'ì', 'í']

Python 2.7

在 Python2.7 中,默认情况下只匹配 i \w :

>>> import re
>>> re.findall('\w', 'üäößéÅßêèiìí')
['i']

你可以使用re.UNICODE:

# encoding: utf-8
import re
any_char = re.compile('\w', re.UNICODE)
re.findall(any_char, u'üäößéÅßêèiìí')
# [u'\xfc', u'\xe4', u'\xf6', u'\xdf', u'\xe9', u'\xc5', u'\xdf', u'\xea', u'\xe8', u'i', u'\xec', u'\xed']
for x in re.findall(any_char, u'üäößéÅßêèiìí'):
    print x
#   ü
#   ä
#   ö
#   ß
#   é
#   Å
#   ß
#   ê
#   è
#   i
#   ì
#   í

任何特殊字符

指定unicode ranges 可能会简化您的正则表达式。例如,此正则表达式匹配任何 unicode arrow :

>>> import re
>>> arrows = re.compile(r'[\u2190-\u21FF]')
>>> re.findall(arrows, "a⇸b⇙c↺d↣e↝f")
['⇸', '⇙', '↺', '↣', '↝']

对于 Python2,您需要指定 unicode 字符串和正则表达式:

>>> import re
>>> arrows = re.compile(ur'[\u2190-\u21FF]')
>>> re.findall(arrows, u"a⇸b⇙c↺d↣e↝f")
[u'\u21f8', u'\u21d9', u'\u21ba', u'\u21a3', u'\u219d']

【讨论】:

  • 这个答案假设“特殊字符”的意思是“特殊字母字符”,对吧?例如特殊字符»«›‹不匹配:re.findall("\w", "»«›‹")返回[]。
  • @Schmuddi:你是对的。我用 unicode 范围更新了答案,这可能会大大缩短正则表达式。
  • 对不起,我应该明确表示我正在寻找像 !@#$% 这样的字符,而不是特殊字母字符。更新了 OP。
【解决方案2】:

您可以尝试使用匹配任何非单词或非数字字符的否定版本(\W、\D)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-13
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 2013-09-19
    • 1970-01-01
    相关资源
    最近更新 更多