Python 正则表达式检查字符串
Python RegEx check string
我正在尝试为输出设置正确的版本。
我有这个可能的字符串:
- 0.0.4.1#1.
- 7.51.4.1#2.
- 0.1.4.1#3.
我需要检查是否为“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+ 个零和 .
例子
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+\.)*
或更广泛的模式来匹配所有前导点和零:
^0+\.[.0]*
您可以使用
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\.]+
我正在尝试为输出设置正确的版本。 我有这个可能的字符串:
- 0.0.4.1#1.
- 7.51.4.1#2.
- 0.1.4.1#3.
我需要检查是否为“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+ 个零和.
例子
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+\.)*
或更广泛的模式来匹配所有前导点和零:
^0+\.[.0]*
您可以使用
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\.]+