有没有办法只使用regex
复制re
的unicode类别匹配功能?我有一个re
匹配字符串,用于标识我想要修改的单词(r'\b[^\W\d_]+\b'
),以便附加到该单词的标点符号(即在单词和字符之间没有非标点字符。 )包含在比赛中。使用regex
我会r'\b[^\W\d_]+\b\p{P}*'
但我无法确定将regex
安装在将部署最终脚本的所有系统上,因此我们希望将匹配条件重新设置为完全re
兼容。这是可能的,如果是这样,我该怎么做?
答案 0 :(得分:1)
要复制main()
功能,您必须使用unicodedata
module手动构建集合;您仍然需要手动过滤所有代码点:
\p{P}
就个人而言,我此时只安装import re
import sys
from unicodedata import category
p_class = re.escape(''.join([
c for c in map(chr, range(sys.maxunicode))
if category(c)[0] == 'P']))
pattern = re.compile(rf'\b[^\W\d_]+\b[{p_class}]*')
,而不是尝试手动构建庞大的字符集。
您可能希望对实际需要匹配的字符进行一些统计分析,而不是所有标点符号,以缩小该集合或表达它在“不是一个字符或空白”方面,regex
,更宽,但匹配更快。