正则表达式,仅接受带重音符的字符

时间:2014-10-15 19:33:42

标签: regex

我需要一个只接受带重音的字符的正则表达式。目前我正在使用这个:

[ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöœøùúûüýþÿ]*$

是否有另一个表达式,比我的表达式更清晰?

4 个答案:

答案 0 :(得分:1)

正则表达式始终是处理文本的最清晰方式,即使它是最快的。

您可以将正则表达式分配给变量,然后通过文本插值插入它:

accent_chars = '[ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöœøùúûüýþÿ]'

my_regex = '^...%s*...$' % accent_chars

您也可以使用以下范围:

[œÀ-ÖØ-öø-ÿ]

使用Python 3进行演示:

>>> import re
>>> s = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöœøùúûüýþÿ'
>>> ''.join(re.findall('[œÀ-ÖØ-öø-ÿ]', s))
'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöœøùúûüýþÿ'
>>> len(''.join(re.findall('[œÀ-ÖØ-öø-ÿ]', s))) == len(s)
True

缺点是不熟悉Unicode的人不会立即清楚这涵盖了所有需要的案例。

答案 1 :(得分:1)

由于œ以外的所有字符都位于字符192 À和255 ÿ之间,您是否可以做一些事情,例如向前看并检查它们是否包含任何字符在你不想要的范围内?我不确定它与你的相比有什么改善,但它有点短,也许,只是可能,更清楚。

(?![÷×])[À-ÿœ]

答案 2 :(得分:1)

我认为这可以解决您的问题:

[œÀ-ÖØ-öø-ÿ]*$

答案 3 :(得分:0)

您也可以尝试使用POSIX bracket expression [:alpha:]。

然后只修剪字符串中的字母字符。