簡體   English   中英

Python 正則表達式匹配

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM