![](/img/trans.png)
[英]Can the [a-zA-Z] Python regex pattern be made to match and replace non-ASCII Unicode characters?
[英]Python regex: pattern with re.ASCII can still match unicode characters?
我是 Python 正則表達式的新手,我正在嘗試匹配 Python 中的非空白 ASCII 字符。
以下是我的代碼:
impore re
p = re.compile(r"[\S]{2,3}", re.ASCII)
p.search('1234') # have some result
p.search('你好嗎') # also have result, but Why?
我在re.compile
中指定了 ASCII 模式,但是p.search('你好嗎')
仍然有結果。 我想知道我在這里做錯了什么?
re.A
標志只影響速記字符類匹配的內容。
In Python 3.x, shorthand character classes are Unicode aware, the Python 2.x re.UNICODE
/ re.U
is ON by default. 這意味着:
\d
:匹配任何 Unicode 十進制數字(即 Unicode 字符類別[Nd]中的任何字符)\D
:匹配任何不是十進制數字的字符。 (因此,除Nd
Unicode 類別中的字符之外的所有字符)。\w
-匹配 Unicode 字字符; 這包括可以成為任何語言中單詞一部分的大多數字符,以及數字和下划線。 (所以, \w+
匹配My name is Виктор
字符串中的每個單詞)\W
-匹配任何不是單詞字符的字符。 這與\w
相反。 (因此,它不會匹配任何 Unicode 字母或數字。)\s
-匹配 Unicode 空白字符(它將匹配NEL
、硬空格等)\S
-匹配任何不是空白字符的字符。 (因此,不匹配NEL
、硬空間等)\b
- 字邊界匹配 Unicode 字母/數字和非字母/數字或字符串的開頭/結尾之間的位置。\B
- 非單詞邊界匹配兩個 Unicode 字母/數字、兩個非字母/數字之間或 Unicode 非字母/數字和字符串開頭/結尾之間的位置。 如果要禁用此行為,請使用re.A
或re.ASCII
:
使
\w
、\W
、\b
、\B
、\d
、\D
、\s
和\S
執行僅 ASCII 匹配,而不是完整的 Unicode 匹配。 這僅對 Unicode 模式有意義,對於字節模式將被忽略。 對應於內聯標志(?a)
。
這意味着:
\d
= [0-9]
- 不再匹配印地語、孟加拉語等數字\D
= [^0-9]
- 並匹配除 ASCII 數字以外的任何字符(即它現在充當(?u)(?![0-9])\d
)\w
= [A-Za-z0-9_]
- 現在只匹配 ASCII 單詞, Wiktor
與\w+
匹配,但Виктор
不匹配\W
= [^A-Za-z0-9_]
- 它匹配除 ASCII 字母/數字/ _
之外的任何字符(即它匹配你好嗎
, Виктор
等。\s
= [ \t\n\r\f\v]
- 匹配常規空格、制表符、換行符、回車符、換頁符和垂直制表符\S
= [^ \t\n\r\f\v]
- 匹配除空格、制表符、換行符、回車符、換頁符和垂直制表符以外的任何字符,因此它匹配所有 Unicode 字母、數字和標點符號和Unicode(非 ASCII)空格。 例如, re.sub(r'\S+', r'{\g<0>}', '\xA0 ', flags=re.A)
將返回'{ } '
,如您所見, \S
現在匹配硬空間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.