gpt4 book ai didi

java - 提取出现在特定模式之后的子串

转载 作者:行者123 更新时间:2023-11-29 05:08:52 26 4
gpt4 key购买 nike

我需要提取出现在输入字符串中特定模式之后的子字符串。我一直在尝试各种组合,但没有得到预期的输出。输入的字符串可以是以下两种形式

1. 88,TRN:2014091900217161 SNDR REF:149IF1007JMO2507 BISCAYNE BLVD STE
2. 88,TRN:2014091900217161 SNDR REF:149IF1007JMO2507

我需要编写一个适用于上述 2 个变体的正则表达式,并提取“SNDR REF:”之后的“149IF1007JMO2507”部分。请在下面找到我编写的示例程序。

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexTester {
private static final String input = "88,TRN:2014091900217161 SNDR REF:149IF1007JMO2507 BISCAYNE BLVD STE";
private static Pattern pattern = Pattern.compile(".*SNDR REF:(.*?)(\\s.)*");
private static Matcher matcher = pattern.matcher(input);
public static void main (String[] args) {
if (matcher.matches()) {
System.out.println(matcher.group(1));
}
}
}

Output:149IF1007JMO2507 BISCAYNE BLVD STE

我希望输出为“149IF1007JMO2507”

谢谢。

最佳答案

您可以使用以下习惯用法来查找您的子字符串:

String[] examples = {
"88,TRN:2014091900217161 SNDR REF:149IF1007JMO2507 BISCAYNE BLVD STE",
"88,TRN:2014091900217161 SNDR REF:149IF1007JMO2507"
};
// ┌ look-behind for "SNDR REF:"
// | ┌ anything, reluctantly quantified
// | | ┌ lookahead for
// | | | whitespace or end of input
Pattern p = Pattern.compile("(?<=SNDR\\sREF:).+?(?=\\s|$)");
// iterating examples
for (String s: examples) {
Matcher m = p.matcher(s);
// iterating single matches (one per example here)
while (m.find()) {
System.out.printf("Found: %s%n", m.group());
}
}

输出

Found: 149IF1007JMO2507
Found: 149IF1007JMO2507

注意

我希望您事先不知道它会是 "149IF1007JMO2507",因此需要进行上下文匹配。

关于java - 提取出现在特定模式之后的子串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29432170/

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