1

在过去的几天里,这一直让我发疯。我试图通过验证记录并同时提取字段来用一块石头杀死两只鸟。我的策略是使用正则表达式来做到这一点:

private Pattern firstNumber = Pattern.compile("\\d{1}");

我的理解是“行中的第一个数字(记录)”。到目前为止,这在获取第一个字段(并确保它是一个数字)方面是有效的,但我想更进一步:

如何调整正则表达式以指定仅当它是唯一字段时才需要该数字?

也就是说,如果记录是简单的10,我想抓取10。但是如果记录是10 4,我不想抓取任何东西(因为这是项目的无效记录)。

我试过:

private Pattern oneNumberOnly = Pattern.compile("\\d{1}\n");

但是——令我懊恼的是——这个(以及它的任何其他排列)并没有得到任何数字。我在这里缺少什么吗?

4

2 回答 2

3

您可以用 表示行/字符串的开头,用 表示行/字符串的^结尾$,因此模式将是

^\d+$

{1}不起作用,因为它排除了任何多于一位的数字,例如 10。Using\d+表示一位或多位数字。使用\d也可能允许小数和负值(不确定Java),所以如果你只想要数字,请替换\d[0-9].

顺便说一下,指定{1}总是多余的,因为默认情况下一个原子匹配一次。

于 2012-09-25T17:54:17.627 回答
1

您可以使用起始行字符和结束行字符。如果您试图获取一个单独的数字,您可以使用:

Pattern.compile("^(\\d)++$");

通过添加 {1},您只会得到一个数字的 1 位数字。您还应该修剪要比较的字符串以消除任何额外的空格。

  • ^- 行首字符
  • \\d- 数字字符 [0-9]
  • +- 1 个或多个匹配 \d 的字符
  • +- 占有(这将抓住所有的数字,比贪婪的量词更快)
  • $- 行尾字符
于 2012-09-25T18:00:06.980 回答