角色的正则表达式最多出现一次

teg*_*ggy 2 python regex

我想在python中检查一个包含句点"."的字符串,最多一次.

Nic*_*zet 8

[^.]*\.?[^.]*$
Run Code Online (Sandbox Code Playgroud)

并且一定要match,不要search

>>> dot = re.compile("[^.]*\.[^.]*$")
>>> dot.match("fooooooooooooo.bar")
<_sre.SRE_Match object at 0xb7651838>
>>> dot.match("fooooooooooooo.bar.sad") is None
True
>>>
Run Code Online (Sandbox Code Playgroud)

编辑:

如果只考虑整数和小数,那就更容易了:

def valid(s):
    return re.match('[0-9]+(\.[0-9]*)?$', s) is not None

assert valid("42")
assert valid("13.37")
assert valid("1.")
assert not valid("1.2.3.4")
assert not valid("abcd")
Run Code Online (Sandbox Code Playgroud)


gim*_*mel 5

不需要正则表达式,请参阅str.count():

str.count(sub[, start[, end]])

返回[start,end]范围内substring sub的非重叠出现次数.可选参数start和end被解释为切片表示法.

>>> "A.B.C.D".count(".")
3
>>> "A/B.C/D".count(".")
1
>>> "A/B.C/D".count(".") == 1
True
>>> 
Run Code Online (Sandbox Code Playgroud)