我有一个关于我创建的规则中的组的问题,以便从文本中提取日期。 我们考虑以下字符串:
fherfrefercr17hfeuetvbyeituew
字符串由开头的所有内容组成,然后有一个由一个或两个数字组成的数字,然后是所有内容。我只需要提取数字" 17"来自上面列出的字符串。
使用以下规则,我只提取7
而不是17
。
.*(\d{1,2}).*
有人可以帮我吗?
谢谢
的Alessandro
答案 0 :(得分:2)
鉴于你的模式:
.*(\d{1,2}).*
这可以通过以下方式工作:
.*
任意次数匹配任何字符
\d{1,2}
由于您的模式表示要匹配1个或 2个数字并且前一个标记是贪婪的,因此正则表达式将匹配单个数字,因为这仍然满足模式(先前的标记偷走第一个数字。)有多种方法可以解决此问题
这将简单地从字符串中提取所有数字(1+位)。如果您只想匹配1位或2位数,请使用\d\d?
或\d{1,2}
。
\d+
\d\d?
\d{1,2}
此方法将贪婪量词*
(在.*
中)转换为惰性量词.*?
。这将匹配任何字符,但尽可能少。这种方法的缺点是它很昂贵,因为引擎需要回溯。
.*?\d{1,2}.*
此方法可以任意次数匹配任何非数字字符,然后匹配一个或两个数字。这可能是您正在寻找的解决方案。
\D*(\d{1,2}).*