gpt4 book ai didi

Java 正则表达式 : Replace character unless preceded by other character

转载 作者:搜寻专家 更新时间:2023-11-01 02:29:50 25 4
gpt4 key购买 nike

我正在使用 Java 和正则表达式,需要将一些数据拆分为多个实体。在我的输入中,单引号字符 (') 指定实体的结尾,除非它前面有转义字符,即问号 (?)。

我的正则表达式是 (?<!\\?)\\'我正在使用扫描仪将输入拆分为单独的实体。所以以下情况可以正常工作:

Hello'There  becomes 2 entities: Hello and There
Hello?'There remains 1 entity: Hello?'There

但是,当我遇到想要转义问号的情况时,它不起作用。所以:

Hello??'There     should become 2 entities:   Hello?? and There
Hello???'There should become 1 entity: Hello???'There
Hello????'There should become 2 entities: Hello???? and There
Hello?????'There should become 1 entity: Hello????'There
Hello?????There should become 1 entity: Hello????There
Hello??????There should become 1 entity: Hello?????There

因此规则是如果有偶数个问号,后面跟着一个引号,它应该被分开。如果有奇数个问号,则不应拆分。

有人可以帮助修复我的正则表达式(希望有解释!)以应对多种情况吗?

谢谢,

菲尔

最佳答案

试试这个表达式来匹配偶数个案:(?<=[^\?](?>\?\?){0,1000})'

  • (?<=...)'是一个积极的表现,即每个 '(?<= 之间的表达式之前和 )将匹配
  • (?>\?\?)是2个连续问号的原子团
  • (?>\?\?){0,1000}意味着可以有 0 到 1000 个这些组。注意不能写(?>\?\?)*因为表达式需要有最大长度(最大组数)。但是,您应该能够将上限增加很多,具体取决于表达式的其余部分
  • [^\?](?>\?\?)...表示 2 个问号的组前面必须有一些字符但不能是问号(否则你会匹配奇怪的情况)

关于Java 正则表达式 : Replace character unless preceded by other character,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12317407/

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