我有一些带有以下模式的文本
,还有可选的a-然后一些数字
所以我可以拥有(可以是一些更大的文本的一部分)
~7
~-6
~-11534
~-0例如,我的文本可以是:
New Zealand~1 expenditure~-900 现在,我正在使用以下模式:
[~-]*[0-9]*[0-9]它似乎做了工作,但我知道0-9*0-9是贪婪匹配(0到无限次)
我想知道是否有更好的模式?
发布于 2017-06-16 08:05:41
编辑:实际上,为了更好地满足您的需求,我建议
~-?[0-9]+通过这种方式,我们指定~是必需的,并且它后面可以是-和数字。
量词后面的问号表示尽量少取,使它不贪婪,但在目前的例子中,它是不必要的。
编辑2:我最近注意到,这些数字并不完全是可选的,并将‘0或多个’量词*改为‘一个或多个’量词+。
编辑3:谈论“贪婪”和“非贪婪”。一个非贪婪的算法会尽可能少地返回,并且在字符串末尾有多个数字的情况下,它只会包含第一个结果,这不是您想要的结果。
更多关于贪婪和非贪婪的算法,这要感谢Wiktor Stribiżew出色的解释:
模式末尾的惰性量词将匹配0(如果*?或1(如果+?(使用)字符。这是因为被延迟量化的模式只获取它们必须首先匹配的内容(最少出现的次数),并被跳过,以便检查后续的模式。只有在没有匹配的情况下,引擎才会返回到懒惰量化的子模式,再扩展一个字符,然后重试。
https://stackoverflow.com/questions/44583982
复制相似问题