gpt4 book ai didi

Java:用于匹配引号之间单词的正则表达式

转载 作者:行者123 更新时间:2023-12-03 18:37:06 29 4
gpt4 key购买 nike

我有以下测试字符串

This is my "te

st" case
with lines for "tes"t"ing" with regex
But as he said "It could be an arbitrary number of words"

我想匹配 " 之间的所有内容,只要它绑定(bind)到单词即可。我有以下正则表达式:

\"([^\"]*)\"

它与 "test" 的单词匹配得很好,即使它分开了。有没有办法找到一个 tes"t"ing 以及一个完整的单词(而不是分成两个单词?尝试使用单词边界 \b (\b\"([^\"]*)\"\b) 效果不佳,因为它既不匹配第一个 " 也不匹配刚才提到的组.

Java 正则表达式需要它。

更新因此我需要有

This is my \q{te

st} case
with lines for \q{tes"t"ing} with regex
But as he said \q{It could be an arbitrary number of words}

最佳答案

你可以使用

.replaceAll("\\B\"\\b(.*?)\\b\"\\B", "\\\\q{$1}")

或者,如果匹配项可能跨越多行,请添加 (?s) 修饰符:

.replaceAll("(?s)\\B\"\\b(.*?)\\b\"\\B", "\\\\q{$1}")

参见 regex demo .

详情

  • \B"\b - " 位于字符串的开头或前面是非单词字符,后面是单词字符
  • (.*?) - 第 1 组:除换行符以外的任何零个或多个字符,尽可能少
  • \b"\B - " 位于字符串的末尾或后跟一个非单词字符,并且前面有一个单词字符。

替换为反斜杠("\\\\",请注意,在正则表达式替换部分中,双文字反斜杠是必要的,以插入真实的文字反斜杠,因为反斜杠是正则表达式中的特殊字符替换模式)、q{、Group1 值($1)和一个 }

参见 Java demo :

String s = "This is my \"te\n\nst\" case\nwith lines for \"tes\"t\"ing\" with regex\nBut as he said \"It could be an arbitrary number of words\"";
System.out.println(s.replaceAll("\\B\"\\b(.*?)\\b\"\\B", "\\\\q{$1}"));

输出:

This is my "te

st" case
with lines for \q{tes"t"ing} with regex
But as he said \q{It could be an arbitrary number of words}

注意:

如果你还需要匹配两个连续的双引号,前面和后面都没有单词字符,可以修改上面的正则表达式如下:

 .replaceAll("(?s)\\B(\"\\b(.*?)\\b\"|\"\")\\B", "\\\\q{$2}")

参见 regex demo .

详情

  • (?s) - 一个嵌入式标志选项(等于 Pattern.DOTALL)使 . 也匹配换行字符
  • \B - 一个非单词边界,在这里,它意味着紧靠左边,必须有一个非单词字符或字符串开头(因为 \B,有一个非字字符,")
  • ( - 第一个捕获组的开始:
    • "\b(.*?)\b" - " 后跟一个单词 char,然后第 2 组捕获任何零个或多个字符,尽可能少, 然后是 " 前面有一个单词 char(这就是为什么这个模式不能匹配 "" 的原因,因为在第一个之后和第二个之前,必须有可以是字母、数字或 _)
    • | - 或者
    • "" - "" 子串
  • ) - 第一个捕获组结束
  • \B - 一个非单词边界,在这里,它意味着紧靠右边,必须有一个非单词字符或字符串结尾(因为在 \B, 有一个非字字符, ").

关于Java:用于匹配引号之间单词的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60820793/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com