【发布时间】:2018-02-24 16:44:05
【问题描述】:
我一直在尝试从转换为文本文件的 PDF 中提取某些文本。 PDF 来自各种来源,我不知道它们是如何生成的。
我试图提取的模式是一个简单的两位数字,后跟一个连字符,然后是另外两位数字,例如12-34。所以我写了一个简单的正则表达式\d\d-\d\d 并希望它能工作。
但是,当我测试它时,我发现它错过了一些命中。后来我注意到至少有两个连字符表示为\u2212 和\xad。所以我将我的正则表达式更改为\d\d[-\u2212\xad]\d\d,它起作用了。
我的问题是,由于我要提取如此多的 PDF,以至于我不知道还有哪些其他连字符变体,是否有任何正则表达式涵盖所有“连字符”,并且希望看起来比 @987654326 更好@表达式?
【问题讨论】:
-
不,您必须确定哪些字符算作“连字符”并手动包含它们。此外,
U+2212不是连字符(它是数学减号),U+00AD也不是(这是一个软“中断”连字符)。 -
@usr2564301 感谢您的评论,但我不想区分它们,只要它们看起来像连字符。我无法控制输入,因为它们是从各种 PDF 文件转换而来的。那么“任何看起来像连字符、减号、破折号、破折号或类似字符的东西”是否有任何正则表达式表示?
-
@KennethL,如果您不介意将连字符与数学减号区分开来,并且只想匹配任何与连字符很相似的东西,为什么不使用@987654330 @ 作为您的正则表达式(这将匹配 unicode 中所有可能的连字符 --- 以及什么不是连字符,但它们可能类似于连字符,具体取决于您的思想开放程度:))
-
@LuisColorado 感谢您对
\d\d.\d\d的建议,但我需要排除12345之类的模式。感谢您提醒我也可以更改我的要求。