[英]Python Regex to check if string 1 and string 2 are of same pattern
[英]Python RegEx check string
我試圖在 output 上設置正確的版本。 我有這個可能的字符串:
我需要檢查,如果“0”。 正在開始(設置 output 不帶 0. 或 0.0.)
Output 1. 將只有"4.1" , 2. 保持不變3. 將是1.4.1
我試圖設置正確的表達式,如^([0\.]{1})([.\d]{3})+$
但即使我使用 {1} 量詞(只有一個“0”)它也沒有正常工作。
有人有線索嗎?
如果應該有 3 個點的 4 位數字部分,您可以首先使用正向超前斷言格式。
在替換中使用空字符串。
^(?=\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))
Output
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 演示。 注意: re.fullmatch
需要完整的字符串匹配,因此無需指定^
和$
錨點。
注意 2 :如果您不想匹配0.0.0.0
中的任何內容,請添加if m.group(1).replace('0',''):
在返回值之前檢查,請參閱此 Python 演示。
查看正則表達式演示的含義
(?:0+\.)*
- 一個或多個0
和一個點的零次或多次出現(\d+(?:\.\d+)*)
- 第 1 組:一位或多位數字,然后是一個點和一位或多位數字的零次或多次重復。使用這個簡單的正則表達式: ^[0\.]+
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.