在Python中搜索连字符的所有Unicode变体

Ken*_*h L 6 python regex

我一直在尝试从PDF中提取某些文本转换为文本文件.PDF来自各种来源,我不知道它们是如何生成的.

我试图提取的模式只是两位数,后跟连字符,然后是另外两位数,例如12-34.所以我写了一个简单的正则表达式\d\d-\d\d并期望能够工作.

然而,当我测试它时,我发现它错过了一些命中.后来我注意到至少有两个连字符表示为\u2212\xad.所以我改变了我的正则表达式\d\d[-\u2212\xad]\d\d并且它有效.

我的问题是,因为我要提取这么多的PDF,我不知道连字符的其他变体是什么,是否有任何正则表达式覆盖所有"连字符",并希望看起来比[-\u2212\xad]表达式更好?

Wik*_*żew 7

您在问题标题中要求的解决方案意味着白名单方法,这意味着您需要找到您认为与连字符相似的字符.

您可以参考标点符号,Dash类别,Unicode cateogry列出所有可能的Unicode连字符.

您可以使用PyPi正则表达式模块并使用\p{Pd}模式匹配任何Unicode连字符.

或者,如果您只能使用re,请使用

[\u002D\u058A\u05BE\u1400\u1806\u2010-\u2015\u2E17\u2E1A\u2E3A\u2E3B\u2E40\u301C\u3030\u30A0\uFE31\uFE32\uFE58\uFE63\uFF0D]
Run Code Online (Sandbox Code Playgroud)

您可以使用minus其Unicode名称中包含的其他Unicode字符展开此列表,请参阅此列表.

一个黑名单的做法意味着你不想匹配的两对数字之间的特定字符.如果要匹配任何非空格,可以使用\S.如果要匹配任何标点符号或符号,请使用(?:[^\w\s]|_).