gpt4 book ai didi

java - 正则表达式提取所有长度的数字

转载 作者:行者123 更新时间:2023-11-29 03:23:05 24 4
gpt4 key购买 nike

我正在尝试从一长串文本中提取长度为 3 到 5 的数字。让我解释一下

假设有一个像这样的字符串 123456,我想提取长度在 3 到 5 之间的所有数字,输出将是

123
234
345
456
1234
2345
3456
12345
23456

我可以运行多个分别查找长度的正则表达式,但可能有比我正在做的更好的方法来做到这一点。

import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexTestHarness {

public static void main(String[] args) throws IOException {

String data = "123456";

Matcher m = Pattern.compile("\\d{3}").matcher(data);

// m = Pattern.compile("\\d{4}").matcher(data);
// m = Pattern.compile("\\d{5}").matcher(data);

int position = 0;

while (m.find(position++)) {
System.out.println(m.group());
}
}
}

过早的优化想法 - 我可以将所有内容都匹配到 5,然后在这些结果上运行更小的长度匹配器。这样我就减少了一遍又一遍地阅读数据,在我的例子中是外部来源。

最佳答案

您可以使用单个正则表达式来完成此操作。只是全局查找。
如果长度大于 0,则打印捕获组 1、2、3

 #  "(?=(\\d{3}))(?=(\\d{4}))?(?=(\\d{5}))?"

(?=
( \d{3} ) # (1)
)
(?=
( \d{4} ) # (2)
)?
(?=
( \d{5} ) # (3)
)?

Perl 测试用例

while ( '123456' =~ /(?=(\d{3}))(?=(\d{4}))?(?=(\d{5}))?/g )
{
print "$1\n";
if ( length ($2) ) {
print "$2\n";
}
if ( length ($3) ) {
print "$3\n";
}
}

输出>>

123
1234
12345
234
2345
23456
345
3456
456

关于java - 正则表达式提取所有长度的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22515540/

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