gpt4 book ai didi

java - 正则表达式捕获后视和前视

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:15:57 25 4
gpt4 key购买 nike

我正在尝试为以下情况编写正则表达式:

badword%
%badword
%badword%

% 符号因位置不同而不同。前面的 % 需要向后看以匹配单词 badword 之前的字母,直到它到达非字母。同样,任何不在前面的 % 都需要先行匹配单词 badword 之后的字母,直到它遇到非字母。

这就是我要实现的目标。如果我有以下内容:

Just a regular superbadwording sentece.

badword   # should match "badword", easy enough
badword% # should match "badwording"
%badword% # should match "superbadwording"

同时。如果我有类似的句子:

Here's another verybadword example.

badword   # should match "badword", easy enough
badword% # should also match "badword"
%badword% # should match "verybadword"

我不想使用空格作为断言捕获组。假设我要捕获 \w

这是我目前在 Java 中所拥有的:

String badword  = "%badword%";
String _badword = badword.replace("%", "");
badword = badword.replaceAll("^(?!%)%", "(?=\w)"); // match a % NOT at the beginning of a string, replace with look ahead that captures \w, not working
badword = badword.replaceAll("^%", "(?!=\w)"); // match a % at the beginning of a string, replace it with a look behind that captures \w, not working
System.out.println(badword); // ????

那么,我该如何实现呢?

PS:请不要假设 % 是被迫进入比赛的开始和结束的。如果 % 是第一个字符,那么它将需要向后看,所有其他 % 都是向前看。

最佳答案

badword = badword.replaceAll("^%", "(?!=\w)"); 
// match a % at the beginning of a string, replace it with a look behind
//that captures \w, not working

(?!=\w)是对 =\w 的负面展望,但您似乎想要一个积极的回顾。其次,前瞻和后视是原子的,因此本质上不捕获,所以如果我的解释是正确的,你想要:

"(?<=(\\w+))" .您需要额外的 ()用于捕获。对于您的第一部分,它将是:"(?=(\\w+)) , 第一个参数应该是 "(?<!^)%" .

PS:\\w 需要两个反斜杠,你似乎想要匹配多个字符,不是吗?如果是这样,您将需要 \\w+ .另外,如果您不想每次都这样做,那么我建议使用 String.format()而不是 replaceAll() .

关于java - 正则表达式捕获后视和前视,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20440438/

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