【问题标题】:How to exclude non-numeric character in regex如何在正则表达式中排除非数字字符
【发布时间】:2019-10-07 12:46:16
【问题描述】:

我有一个这样的字符串

Section 78(1) of the blabla

这些是我的正则表达式

\b\s(?!\b(\d{1,3}|\d{1,2}[a-zA-Z]|\d{5,})\b)\b\S*

预期输出为:of the blabla

这个正则表达式有效,但它不排除“的”,因为 ()。谁能帮我?谢谢

【问题讨论】:

  • 预期输出是什么?
  • 预期输出为“of the blabla
  • 或许你可以去掉前导词边界?
  • 如果预期输出是["of", "the", "blabla"] 的数组,则首先不应在模式的开头使用单词边界,请参阅\s(?!\b(\d{1,3}|\d{1,2}[a-zA-Z]|\d{5,})\b)\S* demo。那是你需要的吗?如果你真的需要一个数组,请解释规则并说明结果。
  • 预期的输出将是“the blabla”。你做的就是一个一个的接一个字是吗? @WiktorStribiżew

标签: regex vb.net


【解决方案1】:

试试这个模式:.+\d\)?

解释:

.+ - 匹配任意字符一次或多次

\d - 匹配数字

\)? - 匹配 ) 零次或一次

由于+的贪婪,它会匹配到最后一位,如果它在括号中,则匹配后面的括号。

Demo

或者使用\d+(?:\(\d+\))?(.+)

然后所需的输出在第一个捕获组中。

Demo

【讨论】:

    【解决方案2】:

    看来您需要更改的只是删除\S* 之前的\b 并将\S* 替换为.+.*(如果匹配项可以是空字符串)。

    \s(?!\b(?:\d{1,3}|\d{1,2}[a-zA-Z]|\d{5,})\b)(.+)
    

    查看regex demo,获取组 1 值。请注意,我将负前瞻中的第一组匹配数字转换为非捕获组,以避免生成的匹配列表混乱。

    VB.NET demo:

    Dim r As New Regex("\s(?!\b(?:\d{1,3}|\d{1,2}[a-zA-Z]|\d{5,})\b)(.+)")
    Dim s As String
    s = "Section 78(1) of the blabla"
    For Each m As Match In r.Matches(s)
        Console.WriteLine(m.Groups(1).Value)
    Next
    

    结果:of the blabla

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-16
      • 1970-01-01
      • 2017-04-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多