代码之家  ›  专栏  ›  技术社区  ›  Christopher Klewes

选择带逗号的字符串(正则表达式)

  •  1
  • Christopher Klewes  · 技术社区  · 16 年前

    我需要一个与以下内容匹配的正则表达式:

    '"test foo bar", "test"' => no match
    '"test, foo bar", "test"' => "test, foo bar"
    '"test, foo bar"' => "test, foo bar"
    '"test foo bar"' => no match
    '"test", "test, foo"' => "test, foo"
    '"test", ","' => no match
    '"test", 0, 0, "foo"' => no match
    

    正则表达式应该匹配任何包含逗号的字符串

    我从 \".+?\" 但它选择直到下一个字符串,这对我不适用。

    \"[\w]+?,.+?\"

    5 回复  |  直到 8 年前
        1
  •  2
  •   Jon Skeet    16 年前

    您一定要在一个正则表达式中执行此操作吗?我将使用一个正则表达式将字符串拆分为它的组成部分,然后在这些部分上迭代以找到第一个带有逗号的部分。

    我在这台笔记本电脑上还没有Java,所以我无法检查代码来进行拆分,但我希望正则表达式是这样的:

    ("[^"]*")(?:, ("[^"]*"))*
    

    Java正则表达式引擎可能不允许您获得同一捕获组的多个匹配项,但是。。。我很确定你可以很容易地在.NET中使用它,但在Java中可能要稍微复杂一些。你 可以 需要类似于:

    (?:^|, )("[^"]*")
    

    在实际字符串的开头之前使用“行的开头,或逗号后跟空格”。

    所有这些都是 不过,只是尝试将文本拆分为若干位,而不是尝试查找包含逗号的第一个字符串。。。但这可能是这样做的起点。不幸的是,此时我的正则表达式fu用完了——我仍然会使用“拆分然后迭代”的方式:)

        2
  •  1
  •   Vinko Vrsalovic    16 年前

    您是否尝试过:

    "[^"]?,[^"]+?"
    

    这将匹配,一个“、任何字符不是”一次或多次直到一个逗号、一个逗号、任何字符不是“一次或多次直到一个”和一个“

        3
  •  1
  •   NawaMan    16 年前

    试试这个: \"[^\"]*,[^\"]*\" .

        4
  •  1
  •   gustafc    16 年前
    "[^,"]+?,[^"]+?"
    
        5
  •  0
  •   Christopher Klewes    16 年前

    \"[\w]+?,.+?\"