【问题标题】:Regex to select numbers untill certain characters正则表达式选择数字直到某些字符
【发布时间】:2020-12-17 13:10:03
【问题描述】:

我有以下结构的数据:

    abdc efgh  1234-5678\1
    abcd efgh 1234-5678
    abcd efgh 1234-5678 nmkl

我只想选择数字范围 12345678 或仅选择 \ 字符之前的数字,不包括空格和连字符。所以 abcd efgh 1234-5678\1 会变成 12345678。

我对 reg ex 不是很好。当然我试过[0-9],但我不知道如何转义\字符。

【问题讨论】:

  • 正则表达式元字符使用反斜杠进行转义,因此您的模式中的 \\ 将匹配您输入中的反斜杠。如果您可以使用捕获组,我将匹配 ([0-9-]+)\\ 并从第一个捕获组中检索您的 1234-5678
  • 我认为您是否要匹配除 9 之外的任何数字还是要捕获不包括连字符的数字子串,这有点不清楚。也许您可以更具体一点并更新您的问题
  • 如果支持,您可以使用 (?<!\\)[0-9]+ regex101.com/r/f5NZtA/1 匹配前面没有反斜杠的数字
  • 无法再编辑我的评论,但正则表达式很容易修改为仅检索数字:([0-9]+)-([0-9]+)\\ 并使用两个捕获组的串联得到12345678try it here )
  • @Aaron 你的解决方案没有去掉我使用的程序中的 \ 字符(我认为是用 C++ 构建的 FME?)

标签: regex


【解决方案1】:

要匹配示例数据中除\1 之外的所有数字,您可以使用否定的lookbehind 来断言直接位于当前位置左侧的内容不是反斜杠。然后匹配 1 个或多个数字。

(?<!\\)[0-9]+

Regex demo

【讨论】:

    猜你喜欢
    • 2013-09-06
    • 2011-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多