我正在努力使正则表达式符合以下条件:
,
或仅允许一个点.
(不是两个)-
(最大为1 -
)这应匹配以下字符串:
4564654
,4 454 845 484
,874584.42
,42 424 484.45
,874584,42
,42 424 484,45
...
不匹配42a
,42.45,42
...
我尝试将其扩展为^[0-9[,.!?]*$
,但没有成功。
答案 0 :(得分:2)
您可以使用字符类来匹配点或逗号,并在可选组中匹配后跟1个以上的数字:
^\d+(?:[,.]\d+)?(?: \d+(?:[,.]\d+)?)*$
这将匹配
^
字符串的开头\d+(?:[,.]\d+)?
将1个以上的数字与一个可选部分匹配,以匹配点号或逗号后跟1个以上的数字(?: \d+(?:[,.]\d+)?)*
将前面的部分重复0+次,并在开头加上一个空格$
字符串的结尾更新
如果字符串只能包含单个点或逗号:
^(?!(?:[^.,\n]*[.,]){2})\d+(?:[,.]\d+)?(?:[^\S\n\r]\d+(?:[,.]\d+)?)*$
^
字符串的开头(?!(?:[^.,\n]*[.,]){2})
负向查找,断言右边的内容不是点或逗号的2倍\d+(?:[,.]\d+)?
匹配1个以上的数字,可以选择匹配点或逗号和1个以上的数字(?:
非捕获组
[^\S\n\r]
Negated character class,不匹配非空格字符,不匹配换行符\d+(?:[,.]\d+)?
匹配1个以上的数字,可以选择匹配点或逗号和1个以上的数字)*
关闭非捕获组并重复0次以上$
字符串的结尾
let regex = /^(?!(?:[^.,\n]*[.,]){2})\d+(?:[,.]\d+)?(?:[^\S\n\r]\d+(?:[,.]\d+)?)*$/;
[
"424242424",
"424242.424",
"454545.58",
"4545454,4545",
"45454,45",
"4 45 44454.45",
"4 454 454,45",
"1 2 3",
"1 2 3",
"4,2 424 484,45 34.4 3 4",
"545g45",
"454.454.45",
"45454,454,45",
"45.44,45",
"45,45.45",
"4 4545 4545 45 45",
].forEach(s => console.log(s + ": " + regex.test(s)))
答案 1 :(得分:1)
您可以使用此正则表达式,
^(?=^[\d ]+[,.]?[\d ]+$)\d+(?:[ .,]\d+)*$
(?=^[\d ]+[,.]?[\d ]+$)
在这里积极的前瞻性保证了\d+(?:[ .,]\d+)*
只会处理一个逗号或点,而df1 = df.T
dfs = {c: df1[[c]] for c in df1.columns}
print (dfs)
{0: 0
col1 1
col2 2
col3 3, 1: 1
col1 4
col2 5
col3 6}
会照顾格式和允许的字符。
答案 2 :(得分:0)
先输入数字或空格:
^[0-9 ]*
然后,逗号或点:
(\.|,)?
然后,再输入一些数字和/或空格,以及表达式的结尾:
[0-9 ]*$
一起:
^[0-9 ]*(.|,)?[0-9 ]*$
答案 3 :(得分:0)
使用此^(\d*? ?\d)+(,|\.)?\d+$