我有一句话:
“包含等等等等的第1,2和5项清单。”
这也可能是这样的:
“根据第2至11项,将会有等等。”
是否有一个简单的正则表达式来获取这些数字?另外,我需要知道它是“1和5”还是“1到5”,所以我可以在必要时填写其他数字。
答案 0 :(得分:1)
您可以使用正则表达式模式(?i)(\\d+)(?:(?:(?:\\s*)(,|and|through)(?:\\s*))|.*$)
。以下示例代码:
final String ps = "(?i)(\\d+)(?:(?:(?:\\s*)(,|and|through)(?:\\s*))|.*$)";
final Pattern p = Pattern.compile(ps);
for (String s : new String[] {
"A list of items 1, 2 and 5 containing blah blah blah.",
"According to items 2 THROUGH 11 there will be blah blah."})
{
System.out.println("***** TEST STRING *****\n" + s + "\n");
final Matcher m = p.matcher(s);
int cnt = 0;
while (m.find()) {
System.out.println(++cnt + ": G1: " + m.group(1) + " G2: "
+ m.group(2));
}
System.out.println("");
}
将输出:
***** TEST STRING *****
A list of items 1, 2 and 5 containing blah blah blah.
1: G1: 1 G2: ,
2: G1: 2 G2: and
3: G1: 5 G2: null
***** TEST STRING *****
According to items 2 THROUGH 11 there will be blah blah.
1: G1: 2 G2: THROUGH
2: G1: 11 G2: null
您可以使用第1组获取数字和第2组,以确定下一步的内容:,
和and
,以便在列表through
中包含下一个数字如果没有更多数字,请包含范围和null
。
答案 1 :(得分:0)
您可以使用“\ d +”等模式轻松地从字符串中提取所有数字,但对于“1到5”之类的短语,您需要更清晰地定义要解析的内容。
答案 2 :(得分:0)
如果您只想查找字符串
中的所有数字public List<String> findDigits(String s) {
String regex = "\\d+";
Matcher m = Pattern.compile(regex).matcher(s);
List<String> digits = new ArrayList<String>();
while (m.find()) {
digits.add(s.substring(m.start(), m.end()));
}
return digits;
}
答案 3 :(得分:0)
这样做:(\b\d+\s+through\s+\d+)|(\b\d+\s+and\s+\d+)|(\b\d+\b)
请注意,\s
将匹配[ \t\n\x0B\f\r]