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

2024-09-25 04:25:41 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我试图提取的模式是一个简单的两个数字,后跟一个连字符,然后是另外两个数字,例如12-34。因此,我编写了一个简单的regex \d\d-\d\d,并希望它能起作用。在

然而,当我测试它时,我发现它漏掉了一些命中率。后来我注意到至少有两个连字符表示为\u2212和{}。所以我把正则表达式改为\d\d[-\u2212\xad]\d\d,它起作用了。在

我的问题是,既然我要提取这么多PDF文件,我不知道还有什么其他连字符的变体,那么有没有正则表达式覆盖所有的“连字符”,希望看起来比[-\u2212\xad]表达式更好?在


Tags: 文件文本pdf表达式来源模式数字变体
1条回答
网友
1楼 · 发布于 2024-09-25 04:25:41

您在问题标题中要求的解决方案暗示了一种白名单的方法,意味着您需要找到您认为类似于连字符的字符。在

您可以参考Punctuation, Dash Category,该Unicode目录列出了所有可能的Unicode连字符。在

您可以使用PyPi regex module并使用\p{Pd}模式来匹配任何Unicode连字符。在

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

[\u002D\u058A\u05BE\u1400\u1806\u2010-\u2015\u2E17\u2E1A\u2E3A\u2E3B\u2E40\u301C\u3030\u30A0\uFE31\uFE32\uFE58\uFE63\uFF0D]

您可以使用其他Unicode字符扩展此列表,这些字符的Unicode名称中包含minus,请参见this list。在

黑名单方法意味着您不希望在两对数字之间匹配特定的字符。如果要匹配任何非空白,可以使用\S。如果要匹配任何标点或符号,请使用(?:[^\w\s]|_)。在

相关问题 更多 >