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