【问题标题】:Searching for all variations of hyphens and dashes in Regex在正则表达式中搜索连字符和破折号的所有变体
【发布时间】: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


【解决方案1】:
【解决方案2】:

如果您的正则表达式引擎允许,这也是一个可能的解决方案

/p{Dash}/u

这将包括所有these characters

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-14
    • 1970-01-01
    相关资源
    最近更新 更多