gpt4 book ai didi

Java - 在两个字符串之间获取所有字符串的最佳方法? (正则表达式?)

转载 作者:IT老高 更新时间:2023-10-28 21:01:55 30 4
gpt4 key购买 nike

这个问题一直困扰着我很长时间,但基本上我正在寻找最有效的方法来获取两个字符串之间的所有字符串。

我已经做了好几个月的方式是通过使用一堆临时索引、字符串、子字符串,这真的很困惑。 (为什么Java没有String substring(String start, String end)这样的native方法?

假设我有一个字符串:

abcabc [pattern1]foo[pattern2] abcdefg [pattern1]bar[pattern2] morestuff

最终目标是输出 foobar。 (后来被添加到 JList 中)

我一直试图在 .split() 中加入正则表达式,但没有成功。我尝试过使用 *. 的语法,但我认为这不是我的意图,特别是因为 .split() 只需要一个参数来拆分。

否则我认为另一种方法是使用 Pattern 和 Matcher 类?但是我对适当的程序真的很模糊。

最佳答案

您可以构建正则表达式来为您执行此操作:

// pattern1 and pattern2 are String objects
String regexString = Pattern.quote(pattern1) + "(.*?)" + Pattern.quote(pattern2);

这会将 pattern1pattern2 视为 literal 文本,并且在第一个 capturing group 中捕获模式之间的文本.您可以删除 Pattern.quote()如果您想使用正则表达式,但如果您这样做,我保证任何事情。

您可以通过向 regexString 添加标志来自定义匹配的发生方式。

  • 如果您想要 Unicode 感知的不区分大小写的匹配,则在 regexString 的开头添加 (?iu),或提供 Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE 标志为 Pattern.compile方法。
  • 如果你想捕获内容,即使两个分隔字符串出现跨行,那么在 (.*?) 之前添加 (?s),即 >"(?s)(.*?)",或提供Pattern.DOTALL标记为 Pattern.compile方法。

然后编译正则表达式,得到Matcher对象,遍历匹配项并将它们保存到 List(或任何 Collection,由您决定)。

Pattern pattern = Pattern.compile(regexString);
// text contains the full text that you want to extract data
Matcher matcher = pattern.matcher(text);

while (matcher.find()) {
String textInBetween = matcher.group(1); // Since (.*?) is capturing group 1
// You can insert match into a List/Collection here
}

测试代码:

String pattern1 = "hgb";
String pattern2 = "|";
String text = "sdfjsdkhfkjsdf hgb sdjfkhsdkfsdf |sdfjksdhfjksd sdf sdkjfhsdkf | sdkjfh hgb sdkjfdshfks|";

Pattern p = Pattern.compile(Pattern.quote(pattern1) + "(.*?)" + Pattern.quote(pattern2));
Matcher m = p.matcher(text);
while (m.find()) {
System.out.println(m.group(1));
}

请注意,如果您在此输入 foo text foo text bar text bar 中搜索 foobar 之间的文本,请使用该方法上面,您将得到一个匹配项,即  text foo text 

关于Java - 在两个字符串之间获取所有字符串的最佳方法? (正则表达式?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11255353/

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