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

时间:2009-09-27 08:34:58

标签: python regex

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

6 个答案:

答案 0 :(得分:8)

[^.]*\.?[^.]*$

请务必match,不要search

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

修改

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

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")

答案 1 :(得分:5)

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

  

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

     

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

>>> "A.B.C.D".count(".")
3
>>> "A/B.C/D".count(".")
1
>>> "A/B.C/D".count(".") == 1
True
>>> 

答案 2 :(得分:2)

您可以使用:

re.search('^[^.]*\.?[^.]*$', 'this.is') != None

>>> re.search('^[^.]*\.?[^.]*$', 'thisis') != None
True
>>> re.search('^[^.]*\.?[^.]*$', 'this.is') != None
True
>>> re.search('^[^.]*\.?[^.]*$', 'this..is') != None
False

(匹配期间为零或一次。)

答案 3 :(得分:0)

虽然句号是特殊字符,但它必须被转义。所以“\。+”应该有用。

编辑:

使用'?'而不是'+'匹配一个或零重复。 看看:re — Regular expression operations

答案 4 :(得分:0)

如果句点在整个字符串中只存在一次,则使用?运算符:

^[^.]*\.?[^.]*$

打破这个局面:

  1. ^匹配字符串的开头
  2. [^.]匹配零个或多个不是句号的字符
  3. \.?匹配句点字符(必须使用\进行转义,因为它是保留字符)正好为0或1次
  4. [^.]*与上面2中使用的模式相同
  5. $匹配字符串的结尾
  6. 顺便说一句,我个人不会使用正则表达式(除非我检查字符串的其他方面是否有效)。我只想使用计数功能。

答案 5 :(得分:0)

为什么需要检查?如果你有一个字符串中的数字,我现在猜你很快就会把它作为一个数字来处理。也许你可以在没有在你跳跃之前看

的情况下做到这一点
try:
  value = float(input_str)
except ValueError:
  ...
else:
  ...