2024-04-25 21:28:23 发布
网友
我是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.compile
p.search('你好吗')
re.A标志只影响速记字符类匹配的内容
re.A
在Python3.x中,shorthand character classes支持Unicode,默认情况下,Python 2.x ^{}/^{}处于启用状态。这意味着:
\d
\D
\w
\w+
My name is Виктор
\W
\s
NEL
\S
\b
\B
如果要禁用此行为,请使用re.A或re.ASCII:
re.ASCII
Make \w, \W, \b, \B, \d, \D, \s and \S perform ASCII-only matching instead of full Unicode matching. This is only meaningful for Unicode patterns, and is ignored for byte patterns. Corresponds to the inline flag (?a).
(?a)
这意味着:
[0-9]
[^0-9]
(?u)(?![0-9])\d
[A-Za-z0-9_]
Wiktor
Виктор
[^A-Za-z0-9_]
_
你好吗
[ \t\n\r\f\v]
[^ \t\n\r\f\v]
re.sub(r'\S+', r'{\g<0>}', '\xA0 ', flags=re.A)
'{ } '
re.A
标志只影响速记字符类匹配的内容在Python3.x中,shorthand character classes支持Unicode,默认情况下,Python 2.x ^{}/^{} 处于启用状态。这意味着:
\d
:匹配任何Unicode十进制数字(即Unicode字符类别中的任何字符[Nd])\D
:匹配任何非十进制数字的字符(因此,除了^{\w
-匹配Unicode单词字符;这包括任何语言中可以作为单词一部分的大多数字符,以及数字和下划线(因此,\w+
匹配My name is Виктор
字符串中的每个单词)\W
-匹配任何非单词字符的字符。这与\w
相反(因此,它将不匹配任何Unicode字母或数字。)\s
-匹配Unicode空格字符(它将匹配NEL
、硬空格等)\S
-匹配任何非空白字符的字符(因此,与NEL
、硬空间等不匹配)\b
-单词边界匹配Unicode字母/数字和非字母/数字之间的位置或字符串的开始/结束李>\B
-非单词边界匹配两个Unicode字母/数字、两个非字母/数字之间的位置,或Unicode非字母/数字和字符串的开始/结束之间的位置李>如果要禁用此行为,请使用
re.A
或re.ASCII
:这意味着:
\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
现在匹配硬空格相关问题 更多 >
编程相关推荐