官术网_书友最值得收藏!

2.6 在正則表達式中使用Unicode字符

在實際應用中,我們需要使用正則表達式處理Unicode字符。

默認情況下,re模塊已經對一些Unicode字符類有了基本的支持。比如,\\d已經匹配任意的unicode數字字符,相關代碼(re_unicode.py)示例如下:


import re
num = re.compile('\d+')
print(num.match('123'))
print(num.match('\u0661\u0662\u0663'))

執行py文件,輸出結果如下:


<re.Match object; span=(0, 3), match='123'>
<re.Match object; span=(0, 3), match='???'>

如果想在模式中包含指定的Unicode字符,可以使用Unicode字符對應的轉義序列(比如\uFFF或者\UFFFFFFF)。下面是一個匹配不同阿拉伯編碼頁面中所有字符的正則表達式,代碼如下:


arabic = re.compile('[\u0600-\u06ff\u0750-\u077f\u08a0-\u08ff]+')
print(arabic)

當執行匹配和搜索操作的時候,最好先處理所有文本為標準化格式,但也應該注意一些特殊情況,如忽略大小寫匹配和大小寫轉換的行為。


pat = re.compile('stra\u00dfe', re.IGNORECASE)
test_str = 'stra?e'
print(pat.match(test_str))
print(pat.match(test_str.upper()))
print(test_str.upper())

混合使用Unicode和正則表達式通常沒有那么好處理。如果真這樣做,最好安裝第三方正則表達式庫,它會為Unicode的大小寫轉換和其他特性提供全面的支持,包括模糊匹配。

主站蜘蛛池模板: 鄂托克前旗| 永顺县| 通河县| 林口县| 陵川县| 淮安市| 奉贤区| 石台县| 静乐县| 杂多县| 普兰县| 乳山市| 达拉特旗| 旬邑县| 赣榆县| 广昌县| 恩平市| 荃湾区| 七台河市| 仙居县| 上犹县| 长岛县| 吴川市| 漳浦县| 阿拉善右旗| 奉化市| 贵州省| 丰都县| 邵东县| 错那县| 曲麻莱县| 南岸区| 沅江市| 桑植县| 徐汇区| 鄂尔多斯市| 泾川县| 革吉县| 通化县| 长白| 伊金霍洛旗|