gpt4 book ai didi

java - java中的正则表达式模式失败,但在其他方面工作正常

转载 作者:行者123 更新时间:2023-12-01 22:04:52 25 4
gpt4 key购买 nike

我实现了一个相当复杂的 pattern ` 匹配所有出现的船舶集编号。它与全局不区分大小写的比较完美地配合。

我使用以下代码在 Java 中实现相同的功能,但它不匹配。 Java 正则表达式应该以不同的方式实现吗?

int i = 0;
while (i < elementsArray.size()) {
System.out.println("List element:"+elementsArray.get(i));
String theRegex = "(?i)(([Ss]{2}|Ship\\s*(set))\\s*(\\#|Number|No\\.)?\\s*([:=\\-\\n\\'\\s])?\\s*\\d+\\s*(\\W*\\d+\\W?\\s*(to|and)?|(to|and)\\s*\\d+)*)";
if (elementsArray.get(i).matches(theRegex)) {
System.out.println("RESULT:");
String shipsets = "";
String thePattern = "(?i)(([Ss]{2}|Ship\\s*(set))\\s*(\\#|Number|No\\.)?\\s*([:=\\-\\n\\'\\s])?\\s*\\d+\\s*(\\W*\\d+\\W?\\s*(to|and)?|(to|and)\\s*\\d+)*)";
Pattern pattern = Pattern.compile(thePattern);
Matcher matcher = pattern.matcher(elementsArray.get(i));

if (matcher.find()) {
shipsets = matcher.group(0);
}

System.out.println("text==========" + shipsets);
}

i++;
}

最佳答案

这里是代码的简化版,假设您的正则表达式在 Java 中正常工作,它应该可以工作。从我的初步调查来看,它似乎确实与您链接中的许多用例相匹配。您不需要使用 String.matches(),因为您已经在使用 Matcher 来检查您是否有匹配项。

List<String> elementsArray = new ArrayList<String>();
elementsArray.add("Shipset Number 323");
elementsArray.add("meh");
elementsArray.add("SS NO. : 34");
elementsArray.add("Mary had a little lamb");
elementsArray.add("Ship Set #2, #33 to #4.");

for (int i=0; i < elementsArray.size(); ++i) {
System.out.println("List element:"+elementsArray.get(i));
String shipsets = "";
String thePattern = "(?i)(([Ss]{2}|Ship\\s*(set))\\s*(\\#|Number|No\\.)?\\s*([:=\\-\\n\\'\\s])?\\s*\\d+\\s*(\\W*\\d+\\W?\\s*(to|and)?|(to|and)\\s*\\d+)*)";
Pattern pattern = Pattern.compile(thePattern);
Matcher matcher = pattern.matcher(elementsArray.get(i));

if (matcher.find()) {
shipsets = matcher.group(0);
System.out.println("Found a match at element " + i + ": " + shipsets);
}
}
}

您可以在下面的输出中看到,三个船舶测试字符串全部匹配,而控件 "meh""Mary had a Little Lamb" 没有匹配匹配。

输出:

List element:Shipset Number 323
Found a match at element 0: Shipset Number 323
List element:meh
List element:SS NO. : 34
Found a match at element 2: SS NO. : 34
List element:Mary had a little lamb
List element:Ship Set #2, #33 to #4.
Found a match at element 4: Ship Set #2, #33 to #4.

关于java - java中的正则表达式模式失败,但在其他方面工作正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33008233/

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