使用re从正则表达式复制\ p {P}?

时间:2018-04-25 21:08:35

标签: python regex python-3.x

有没有办法只使用regex复制re的unicode类别匹配功能?我有一个re匹配字符串,用于标识我想要修改的单词(r'\b[^\W\d_]+\b'),以便附加到该单词的标点符号(即在单词和字符之间没有非标点字符。 )包含在比赛中。使用regex我会r'\b[^\W\d_]+\b\p{P}*'但我无法确定将regex安装在将部署最终脚本的所有系统上,因此我们希望将匹配条件重新设置为完全re兼容。这是可能的,如果是这样,我该怎么做?

1 个答案:

答案 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,更宽,但匹配更快。