gpt4 book ai didi

java - 正则表达式 - 使用正则表达式搜索字符串并从原始字符串中提取匹配项

转载 作者:行者123 更新时间:2023-12-01 13:29:03 25 4
gpt4 key购买 nike

假设我有以下字符串。

Lorem ipsum XYZ1234-123456-12 lorem ipsum

我想在字符串中搜索任何具有 XXXDDDDDDDDDDDD 模式的字符串(即 3 个字符后跟 12 个数字,忽略任何非字母数字字符)

为了实现这一目标,我做了这样的事情

String incomingId = "Lorem ipsum XYZ1234-123456-12 lorem ipsum"

private final static Pattern NONCHARACTER = Pattern.compile("[^a-zA-Z0-9]");
String removedNonChars = NONCHARACTER.matcher(incomingId ).replaceAll("") //returns LoremipsumXYZ123412345612loremipsum

然后我运行另一个正则表达式来搜索我想要的序列(即XXXDDDDDDDDDDDD)

private final static Pattern IDENTIFIERPATTERN = Pattern.compile("([a-zA-Z]{3,})(\d{3})(\d{6})(\d{2})");
String extractedString = IDENTIFIERPATTERN.matcher(removedNonChars) //returns a match on XYZ123412345612

一旦我获得了具有我正在寻找的格式的字符串(即XYZ123412345612),我想从原始的未修改字符串中提取该字符串(即值XYZ1234-123456 -12)

注意 - 连字符只是一个示例,非字符可以是任何非字母数字字符 - 示例:

Lorem ipsum XYZ1234-123456-12 lorem ipsum
Lorem ipsum XYZ123412345612 lorem ipsum
Lorem ipsum XYZ1234 123456 12 lorem ipsum
Lorem ipsum XYZ1234!123456#12 lorem ipsum
Lorem ipsum XYZ1234--123456#12 lorem ipsum

基本上我正在做的是在字符串中搜索标识符。标识符通常具有定义的格式,但有时人们不使用标识符的规则,因此我在字符串中没有非字符的情况下进行搜索。在我提取没有非字符的字符串后,我想提取带有非字符的原始字符串。

如何使用初始搜索中作为匹配项返回的字符串从原始字符串中提取字符串。

编辑

分隔符始终是非字母数字的。即不是数字也不是字符(即只有特殊字符,例如 -,#£$"(!__£($&£^"并包括“空格”字符)。

提前致谢。

最佳答案

通过替换这些非数字字符,您的任务会变得困难。相反,您应该创建一个正则表达式来直接从字符串中提取该部分。

这里的问题是,您不能直接执行 \\d{12},因为数字不连续。那么,让我们修改该部分。由于中间可以有 0 个或多个非数字字符,因此可以使用 - \\d\\D* 而不是 \\d,并应用匹配 11 次,最后匹配单个数字。

因此您可以使用以下正则表达式:

"[a-zA-Z]{3}(\\d\\D*){11}\\d)"

将其与 Matcher#find() 方法一起使用,并将整个组从中取出。

String str = "Lorem ipsum XYZ1234-123456-12 lorem ipsum";

Pattern pattern = Pattern.compile("[a-zA-Z]{3}(\\d\\D*){11}\\d");
Matcher matcher = pattern.matcher(str);

if (matcher.find()) {
System.out.println(matcher.group());
}

输出:

XYZ1234-123456-12

更新:

如果数字之间的分隔符是非字母数字的,那么您可以使用 [\\W_] 而不是 \\D,正如 @Pshemo 在评论:

"[a-zA-Z]{3}(\\d[\\W_]*){11}\\d"

关于java - 正则表达式 - 使用正则表达式搜索字符串并从原始字符串中提取匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21662444/

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