代码之家  ›  专栏  ›  技术社区  ›  Nick Heiner

如何在此正则表达式中包含减号?

  •  1
  • Nick Heiner  · 技术社区  · 14 年前

    我尝试匹配以下三行:

    usemtl ftw
    kd 1.2 3.2 3.1
    v  -12.1892 -53.4267 -276.4055
    

    我的regex与前两个匹配:

    ^(\w+) ((\S+)( \S+)*) *$
    

    我尝试了一些变体来匹配负数,但它们只是阻止了任何匹配:

    ^(\w+) (([\S-]+)( [\S-]+)*) *$
    ^(\w+) (((\S|-)+)( (\S|-)+)*) *$
    

    我在这里应该做什么? - 在regex中不是一个特殊的角色吗?

    5 回复  |  直到 14 年前
        1
  •  3
  •   NullUserException Mark Roddy    14 年前

    - 只是字符类中的特殊字符 [...]

    你的问题来自 v -12.1892 -53.4267 -276.4055 中间有两个空格 v -12.18... . 你的正则表达式只匹配一个。

    请尝试此regex:

    ^(\w+)\s*((\S+)( \S+)*) *$
    

    尽管可以将regex简化为(但不确定要匹配和捕获什么):

    ^(\w+)(\s*\S+)*$
    

    看到它 http://rubular.com/r/D86njdYzJF

        2
  •  2
  •   Mitch Dempsey    14 年前

    把它放在班上的第一位: [-\S] 那么它就可以工作了。

        3
  •  1
  •   Bobby    14 年前

    在v和-12.1892之间有两个空格,这似乎是你的问题。还使用 - 在字符类中,即 [...] 你需要用 \-

        4
  •  0
  •   Kranu    14 年前

    它不匹配的原因是因为第三行在 v -12.1892 . 试试这个:

    ^(\w+) +(([\S]+)( [\S]+)*) *$ (添加的+符号允许多个空格)

    下面是测试它的jsFiddle: http://jsfiddle.net/xewys/

        5
  •  0
  •   Echelon    14 年前

    Rosarch,你在陈述你的需求时并没有那么具体-我能想到的最基本的正则表达式与你的样本数据相匹配是“(\s+\s+)+”,但这可能不适合你-它似乎太通用了。让我知道你想要达到的目标,我会给你雷吉士,