我有一个自由流动的字符串,其中包含一些随机文本:
"Some random text 080 2668215901"
"Some ramdom text 040-1234567890"
"Some random text 0216789101112"
我需要捕获3位数字和以下10位数字:
我正在使用Java。
这就是我试图从自由流动的文本中获取数字:
"\\w+([0-9]+)\\w+([0-9]+)"
我可以进行字符串长度检查,看看在Hypen或空格之前是否有任何3位数字,然后是10位数字。但我真的想探索正则表达式是否可以给我一个更好的解决方案。
此外,如果String中有更多的出现,我需要全部捕获它们。我还需要捕获任何10位数的字符串,不需要在超级和空格之前
答案 0 :(得分:2)
通常是(\d{3})[ -]?(\d{10})
边界条件可能为(?<!\d)(\d{3})[ -]?(\d{10})(?!\d)
答案 1 :(得分:1)
假设您将在各个行上运行此正则表达式,并忽略一些......更具表现力的正则表达式实现,这可能是最简单的方法:
/([0-9]{3})[ -]?([0-9]{10})/
如果您的文字可能以数字结尾,则您需要将结果锚定到该行的末尾,如下所示:
/([0-9]{3})[ -]?([0-9]{10})$/
如果您保证输入周围的文字双引号字符,则可以使用:
/([0-9]{3})[ -]?([0-9]{10})"$/
如果您需要匹配整行以进行某些输入错误测试,您可以使用:
/^"(.+)([0-9]{3})[ -]?([0-9]{10})"$/
答案 2 :(得分:0)
这是一个更长的演示。根据你上面的回答,你也会在比赛结束后寻找跟踪比赛的比赛。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
class Class {
private static final Pattern p = Pattern.compile("" +
"((?<threeDigits>\\d{3})[- ]?)?" +
"(?<tenDigits>\\d{10})");
public static void main(String... args) {
final String input =
"Here is some text to match: Some random text 080 2668215901. " +
"We're now matching stray sets of ten digit as well: 1234567890. " +
"Notice how you get the first ten and the second ten, with the preceding three:1234123412-040-1234567890" +
"A stranger case:111222333444555666777888. Where should matches here begin and end?";
printAllMatches(p.matcher(input));
}
private static void printAllMatches(final Matcher m) {
while (m.find()) {
System.out.println("three digits: " + m.group("threeDigits"));
System.out.println("ten digits: " + m.group("tenDigits"));
}
}
}
切换到找到战斗计划。