【问题标题】:Regexp match all specified signs only between quotes正则表达式仅匹配引号之间的所有指定符号
【发布时间】:2016-02-25 14:21:00
【问题描述】:

输入:"string&number one&two" & "word&number two&three"

所需输出:"string number one two" & "word number two three"

换句话说,正则表达式必须匹配 & 仅在引用的短语中,并保持在它们之间。我只做了以下事情:

(?<=^|\s").*?([&])[^"]+

但是有一个非贪婪表达式只匹配每个短语中的第一个&amp;,如果我使用贪婪的正则表达式,它将只匹配整个字符串中的最后一个&amp;

我该怎么做?我真的尝试了很多方法,失去了耐心。

【问题讨论】:

  • 引号内的和号周围是否有空格?
  • Gary_W - 实际上我简化了任务,可能有任何顺序的整组字符,所以答案是肯定的。
  • 您应该在您的规范中说明这一点,以便获得更完整的答案来处理您需要处理的条件。

标签: regex


【解决方案1】:

试试这个。它不仅适用于两个部分。

var str = '"string&number one&two" & "word&number two&three" & "string regex&test"';
str.replace(/&(?=[^"]+?\S")/g,' ');
console.log(str); 
// '"string number one two" & "word number two three" & "string regex test"'

【讨论】:

  • 亚当,非常感谢!这似乎正是我需要的
  • 有趣的想法,但在quite some cases 中可能会失败。
【解决方案2】:

引号之间的&amp; 符号前面的" 数量不均匀。

"string&number one&two" & "word&number two&three"
       3 " ahead -> uneven -> inside
                  3 " ahead -> uneven -> inside
                        2 " ahead -> even -> outside
                               1 " ahead -> uneven -> inside
                                          1 " ahead -> uneven -> inside

如果在$ end 之前没有偶数数量的"lookahead 可以检查每个&amp;

&(?!(?:[^"]*"[^"]*")*[^"]*$)

See demo and more explanation at regex101

【讨论】:

    【解决方案3】:

    为了好玩,这里是 buraquete 在 Oracle 中的解决方案:

    with tbl(str) as (
      select '"string&number one&two" & "word&number two&three"' from dual
    )
    select regexp_replace(str, '(\S)&(\S)', '\1 \2') fixed_string
    from tbl;
    

    当然,如果引号内的和号周围可以有空格,则此解决方案将失败,但这不是给定的要求。

    【讨论】:

      【解决方案4】:

      执行以下替换调用;

      var str = '"string&number one&two" & "word&number two&three"';
      var result = str.replace(/(\S)&(\S)/g, "$1 $2");
      console.log(result);
      

      结果字符串;

      "string number one two" &amp; "word number two three"

      我在这里给出了javascript代码,但是你可以使用其他语言的类似函数。

      【讨论】:

      • 这也将替换&amp;之外的" ",如果它之前和之后除了空格之外还有其他内容。在这种情况下,'"string&amp;number one&amp;two" string&amp;number "word&amp;number two&amp;three"' 之外的" " 也将被替换。
      • 我试图适应他给出的条件,它提到有引用的字符串与 & 连接。内部 & 与它周围的单词相邻,因此是我的正则表达式。我可以添加进一步的约束以适应引用,但似乎有点过头了。如果他提到这种情况,我们就谈谈吧。
      • @user1858268 - 需求收集的好课!在你得到所有答案之前不要开始编码,否则你将注定要不断地返工。大多数情况下,请求者甚至不会意识到这些可能性,直到您问:引号内的&符号周围是否有空格?引用的文本可以多于 2 组吗?引号之外可能有&符号吗?引用的文本是否来自文本框并且可能包含回车符?等等,等等。把所有的规格都预先写好,以后省得自己返工,第一次交付一个可靠的产品。
      【解决方案5】:

      你不能只用一个正则表达式来做到这一点。您需要编写一些代码来查找引号之间的字符串,将&amp; 替换为空格,然后继续。

      【讨论】:

      • “我发现你缺乏信心” - 达斯维达 :-)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-16
      相关资源
      最近更新 更多