我需要一个只接受带重音的字符的正则表达式。目前我正在使用这个:
[ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöœøùúûüýþÿ]*$
是否有另一个表达式,比我的表达式更清晰?
答案 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:]。
然后只修剪字符串中的字母字符。