过去几天这让我发疯了。我试图通过验证记录并同时提取一块土地,一举两得。我的策略是用正则表达式做到这一点:
private Pattern firstNumber = Pattern.compile("\\d{1}");
我理解为“行中的第一个数字(记录)。”到目前为止,这已经有效地抓住了第一个领域(并确保它是一个数字),但我想更进一步:
我如何调整正则表达式以指定仅在数字为唯一字段时才需要数字?
也就是说,如果记录只是10
,我想抓住10.但是如果记录是10 4
,我不想抓取任何东西(因为这是一个无效的记录该项目)。
我试过了:
private Pattern oneNumberOnly = Pattern.compile("\\d{1}\n");
但是 - 令我懊恼的是 - 这个(以及它的任何其他排列)都没有接收任何数字。这里有什么我想念的吗?
答案 0 :(得分:3)
您可以使用^
表示行/字符串的开头,使用$
表示行/字符串的结尾,因此模式将为
^\d+$
{1}
不起作用,因为它排除了包含多个数字的任何内容,例如10.使用\d+
表示一个或多个数字。使用\d
也可能允许小数和负值(不确定Java),因此如果您只想要数字,请将\d
替换为[0-9]
。
顺便说一下,指定{1}
总是多余的,因为默认情况下,原子匹配一次。
答案 1 :(得分:1)
您可以使用起始行字符和结束行字符。如果您尝试获取自己的数字,可以使用:
Pattern.compile("^(\\d)++$");
通过添加{1},您只能得到一个数字的1位数。你还应该修剪你要比较的字符串,以消除任何额外的空格。
^
- 行首字符\\d
- 数字字符[0-9] +
- 与\ d +
- 占有(这将抓住所有数字并且比贪婪的量词更快)$
- 行尾字符