[英]Python Regular Expression Matching
我有一棵由字符串表示的樹,例如:
A = '1@2@3@'
其中 1 是 2 的父級,它是 3 的父級,依此類推。
我正在嘗試獲得一個僅匹配 A 的直接子級的正則表達式。
例如,如果我們有:
B = '1@2@3@4@' #child of A
C = '1@2@3@4@5@' #not child of A
D = '1@2@3@5@' #child of A
使用 A 匹配 B 和 D 但不匹配 C 的正則表達式是什么?
編輯:“@”之間的位數是任意的
您可以在沒有正則表達式的情況下執行此操作:
def ischildof(parent, child):
return child.startswith(parent) and "@" not in child[len(parent):-1] and child[-1] == "@"
或者使用正則表達式——但也許這有點矯枉過正:
import re
def ischildof(parent, child):
return not not re.fullmatch(re.escape(parent) + r"\d+@", child)
示例運行(對於上述任何一個):
A = '1@2@3@'
print(ischildof(A, '1@2@3@4@')) # True
print(ischildof(A, '1@2@3@4@5@')) # False
print(ischildof(A, '1@2@3@5@')) # True
print(ischildof(A, '1@2@3@')) # False
如果你想匹配一個字符串,你可以像這樣直接寫出來
A = '1@2@3@'
str_regex = f"{A}"
如果您想匹配任何數字至少一個,您可以這樣做
num_regex = "[0-9]+"
如果您希望您的正則表達式匹配到字符串的結尾,您需要這樣做
end_str_regex = "(abc)$"
這將強制任何不以 'abc' 結尾的字符串不匹配。 我相信這會解決你的直接孩子問題。 我認為你的正則表達式看起來像這樣:
f"{A}[0-9]+@$"
如果您有其他標准,請隨時修改它。 帶有正則表達式的 f-string 可能會搞砸,因此可以使用原始 f-string 或字符串連接。 您可以在此處閱讀有關正則表達式的更多信息: https ://docs.python.org/3/library/re.html。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.