gpt4 book ai didi

java - 在捕获组中转义正则表达式

转载 作者:太空宇宙 更新时间:2023-11-04 07:24:43 26 4
gpt4 key购买 nike

我必须提取字符串的一部分

假设字符串是

    "this is a string "xyz" "

我想从这里提取的是字符串

    xyz

但问题是我有同一个字符串的两个变体。

"this is a string "xyz" "
"this is a string - "

我要提取

    xyz or -

我尝试过提取器

    ".*((?:")[^"]*(?:")|-).*".r

这提取 - 好吧,它也提取字符串,但我不排除引号。当我给出上面提到的2个字符串时得到的结果如下

    "xyz" instead of xyz
- as expected

提前致谢。

最佳答案

使用look-around ,即替换:

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

(?<=")[^"]*(?=")

(?<=")是正向后查找,检查前一个字符是否为 " ,但不将其包含在匹配中。
(?=")是积极的前瞻,检查下一个字符是否是 " ,但不将其包含在匹配中。

如果您要在较大的字符串中搜索此内容,您可能还需要替换 .*.*? .*?将匹配尽可能少的字符,其中 .*将匹配尽可能多的。举个例子,给定 abbbaabbba :

a.*a  finds abbbaabbba as one match
a.*?a finds abbba and abbba separately

这些更改引入了一个新问题,因为环视可以尝试匹配外部大括号,而普通匹配则不能。如果您替换 .*.+ ,它应该可以防止这个问题(假设这对于 - 匹配有效,由于使用了环视,引号匹配应该是相同的)。

最终正则表达式:

".+((?<=")[^"]*(?=")|-).+"

我不确定.r是什么是为了。

Test .

关于java - 在捕获组中转义正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18734726/

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