Python 正则表达式检查字符串

Python RegEx check string

我正在尝试为输出设置正确的版本。 我有这个可能的字符串:

我需要检查是否为“0”。在开始(设置输出没有 0. 或 0.0.)

输出 1. 将只有 "4.1",2. 将保持 相同,而 3. 将是 1.4.1

我正在尝试像 ^([0\.]{1})([.\d]{3})+$ 一样设置正确的表达式,但即使我使用 {1} 量词(仅一个“0”)也无法正常工作。

有人有线索吗?

如果应该有 4 位数字部分和 3 个点,您可以先使用正向先行断言格式。

在替换中使用空字符串。

^(?=\d+(?:\.\d+){3}$)0+\.(?:0+\.)*
  • ^ 字符串开头
  • (?=\d+(?:\.\d+){3}$) 正面前瞻,用 3 个点断言 4 位数字部分
  • 0+\. 匹配 1+ 个零和 .
  • (?:0+\.)* 可选择重复匹配 1+ 个零和 .

Regex demo | Python demo

例子

import re
strings = ["0.0.4.1", "7.51.4.1", "0.1.4.1", "001", "0.1", ".0.1", "0.0.0.0", "0.1.2.3.4.5"]
pattern = r"^(?=\d+(?:\.\d+){3}$)0+\.(?:0+\.)*"
for s in strings:
    print(re.sub(pattern, "", s))

输出

4.1
7.51.4.1
1.4.1
001
0.1
.0.1
0
0.1.2.3.4.5

其他选项可能是在开头匹配零和一个 .,然后重复零和一个点。

^0+\.(?:0+\.)*

Regex demo

或更广泛的模式来匹配所有前导点和零:

^0+\.[.0]*

Regex demo

您可以使用

import re
texts = ['0.0.4.1','7.51.4.1','0.1.4.1']
for text in texts:
    m = re.fullmatch(r'(?:0+\.)*(\d+(?:\.\d+)*)', text)
    if m:
        print(m.group(1))
# => 4.1
#    7.51.4.1
#    1.4.1

看到 Python demo. NOTE: re.fullmatch 需要完整的字符串匹配,所以不需要指定 ^$ 锚点。

注意 2:如果您不想匹配 0.0.0.0 中的任何内容,请在返回值之前添加 if m.group(1).replace('0',''): 检查,请参阅 this Python demo.

regex demo意思

  • (?:0+\.)* - 一个或多个 0 和一个点
  • 出现零次或多次
  • (\d+(?:\.\d+)*) - 第 1 组:一位或多位数字,然后零次或多次重复一个点和一位或多位数字。

使用这个简单的正则表达式: ^[0\.]+

https://regex101.com/r/zUKutI/1/