gpt4 book ai didi

java - 是否可以修改模式,以便在应用拆分时分隔符将是与基本模式不匹配的任何内容?

转载 作者:行者123 更新时间:2023-12-02 00:18:02 24 4
gpt4 key购买 nike

在最近使用String.split()时,我遇到了一种情况,文本是如此动态,选择匹配项比过滤掉不匹配项更容易.

我发现自己想知道是否可以修改 String.split() 的“反向正则表达式”,以便您可以给它任何模式,并且它会匹配每组不匹配的字符那种模式。

*注意:这里的“问题”可以通过 String.matches()TokensMatcher.group() 轻松解决这个问题主要是假设(代码示例仍然受欢迎,因为问题的性质非常需要它),并且它不是关于如何实现结果,而是关于如果可以通过这种方式实现它们

<小时/>

我尝试过:

String pattern1 = "(test)"; //A verif. that what "should-not-match" is working correctly.
String pattern2 = "[^(test)]"; //FAIL - unmatches the letters separately.
String pattern3 = "(^(test))"; //FAIL - does not match anything, it seems.
String text = ""
+ "This is a test. "
+ "This test should (?not?) match the word \"test\", whenever it appears.\n"
+ "This is about to test if a \"String.split()\" can be used in a different way.\n"
+ "By the way, \"testing\" does not equal \"test\","
+ "but it will split in the middle because it contains \"test\".";
for (String s : text.split(pattern3)) {
System.out.println(s);
}

以及其他类似的模式,但没有一个接近成功。

<小时/>

更新:

我现在也尝试了一些使用特殊构造函数的模式,但也还没有让它发挥作用。

至于我想要的,按照“测试”示例,是获取一个包含内容为“文本”的字符串的数组(我想用作基本模式,或者换句话说,我想查找什么)。

但是使用String.split()来做到这一点,使用基本模式直接导致“无论不是(测试)”,因此需要逆转才能导致“只是出现的情况” (测试)”。

圣经大小的长篇故事短篇小说,需要的是 String.split() 的正则表达式,它会导致这种行为(+结果):注意:遵循上面的示例代码,包括所需的变量(文本)。

String[] trash = text.split("test"); //<-base pattern, needs reversing.
System.out.println("\n\nWhat should match the split-pattern (due reversal), become separators, and be filtered out:");
for (String s : trash) {
System.out.println("[" + s + "]");
text = text.replace(s, "%!%"); //<-simulated wanted behavior.
}
System.out.println("\n\nWhat should be the resulting String[]:");
for (String s : text.split("%!%")) {
System.out.println(s);
}
System.out.println("Note: There is a blank @ index [0], since if the text does not start with \"test\", there is a sep. between. This is NOT WRONG.");
<小时/>

欢迎提供代码示例。毕竟,创建此类代码的可能性(或不可能性)是这个问题的本质。

最佳答案

您可能正在谈论 (?! 结构。

它记录在 Pattern 类的 javadoc 中。他们称之为否定前瞻断言。

解决问题最直接的方法就是重复查找。

    Pattern p = Pattern.compile(regexForThingIWant);
Matcher m = p.matcher(str);
int cursor = 0;
while (m.find(cursor)) {
String x = m.group();
// do something with x
cursor = m.end();
}

我能够拼凑出一个正则表达式来进行分割,这似乎可以满足您的要求,但效果很差:

(^|(?<=test))((?!test).)*

关于java - 是否可以修改模式,以便在应用拆分时分隔符将是与基本模式不匹配的任何内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11566386/

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