我想过滤掉所有.+[0-9].
(正确方法?)模式,以避免数字中重复的小数点:(例如,.12345.
);但允许非数字包含重复的小数点:(例如 .12345*.
)其中*
是NON-NUMERAL
。
如何在正则表达式模式中包含非数字否定值?再次,
.12345. <-- error: erroneous numeral.<br/>
.12345(.' or '.12345*.' <-- Good.
答案 0 :(得分:2)
我认为你在寻找
^\d*(?:\.\d+)?(?:(?<=\d)[^.\d\n]+\.)?$
这是a demo
请记住在Swift中正确地逃避正则表达式:
let rx = "^\d*(?:\\.\\d+)?(?:(?<=\\d)[^.\\d\\n]+\\.)?$"
REGEX EXPLANATION :
^
- 字符串开头\d*
- 可选择匹配数字(?:\.\d+)?
- 匹配小数部分,0或1次(由于?
)(?:(?<=\d)[^.\d\n]+\.)?
- 可选(由于末尾为?
)匹配一个或多个前面带有数字的符号(由于(?<=\d)
lookbehind)而不是数字({{1} }),句号([^\d]
)或换行符([^.]
)(这个更多用于演示目的),然后是句号([^\n]
)。\.
- 字符串结尾我正在使用非捕获组$
以获得更好的性能和可用性。
<强>更新强>:
如果您更喜欢相反的方法,即匹配无效字符串,您可以使用更简单的正则表达式:
(?:...)
在Swift中,\.[0-9]+\.
。它匹配任何以点开头的子串,然后是0到9范围内的1位或更多位,然后再点一个点。
答案 1 :(得分:1)
非数字正则表达式分隔的字符是\D
。相反,如果您只查找数字,\d
会起作用。
如果没有进一步了解你想要实现的内容,很难建议如何为它构建一个正则表达式,虽然基于你的例子,(我认为)这应该有效:.+\d+\D+