4

这是一个 GSM 字符集(如下)。我需要确保只有包含这些字符的文本才会匹配。如果文本包含此范围之外的任何内容,如果将不匹配...

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567889@?£_!1$"¥#è
?¤é%ù&ì\ò(Ç)*:Ø+;ÄäøÆ,<LÖlöæ-=ÑñÅß.>ÜüåÉ/§à¡¿' 

这是我尝试过的......

@£$¥èéùìòÇ\fØø\nÅåΔ_ΦΓΛΩΠΨΣΘΞÆæßÉ !\"#¤%&'()*+,-./[0-9]:;<=>\?¡[A-Z]ÄÖÑܧ¿[a-z]äöñüà\^\{\}\[~\]\|€

我需要一个只匹配以下内容的正则表达式

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567889@?£_!1$"¥#è
?¤é%ù&ì\ò(Ç)*:Ø+;ÄäøÆ,<LÖlöæ-=ÑñÅß.>ÜüåÉ/§à¡¿'

如何?谢谢。

更新:

 rule = re.compile(r'^[\w@?£!1$"¥#è?¤é%ù&ì\\ò(Ç)*:Ø+;ÄäøÆ,<LÖlöæ\-=ÑñÅß.>ÜüåÉ/§à¡¿\']+$')

    if not rule.search(value):
        msg = u"Invalid characters."
        raise ValidationError(msg)
4

2 回答 2

5

尝试

r'^[\w@?£!1$"¥#è?¤é%ù&ì\\ò(Ç)*:Ø+;ÄäøÆ,<LÖlöæ\-=ÑñÅß.>ÜüåÉ/§à¡¿\']+$'

如果您想在还包含其他字符的字符串中匹配上述字符,请删除前导^和尾随$

请注意,上述内容不允许使用空格字符。如果您想包含它们,只需在集合中添加一个空格(或者\s如果您还想包含换行符,则添加)。

于 2013-04-07T19:11:55.307 回答
1

不使用正则表达式的另一种方法:

>>> valid_chars = set(u'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567889@?£_!1$"¥#è?¤é%ù&ì\ò(Ç)*:Ø+;ÄäøÆ,<LÖlöæ-=ÑñÅß.>ÜüåÉ/§à¡¿\'')
>>> tests = ['hello', u'£_!', u'Ϡ']
>>> [len(set(t).difference(valid_chars)) == 0 for t in tests]
[True, True, False]
于 2013-04-07T19:45:01.067 回答