簡體   English   中英

如何在python正則表達式中重復模式?

[英]How to repeat a pattern in python regular expression?

我正在做一個python正則表達式,並有一個有效的表達式:

\n(?P<curve>\w+)(?:.+)(?P<unit>\.\S*)(?:\s+.\s+)(?P<desc>:.+)|\n(?P<curve2>\w+)(?:.+)(?P<unit2>\.\S*)|\n(?P<curve3>\w+)

我想知道我可以從頭開始重復這種模式,原因是我不想針對每種情況將許多“曲線”或“單元”分組。

我的測試數據如下:

#-------------
MD              
BMK_STA            .Mpsi                                   : Modulus
FANG        .                                   : Friction Angle
PR             .unitless                               :  
RHO           .g/cm3                                  

想法是將MD和RHO也放在“曲線”組中。

我不確定您的意思,但以下內容可能會有所幫助:

如果要查找模式的每個匹配項,則可以使用re.findall(pattern, string)

它返回匹配項list

重新模組文件

在正則表達式中沒有特殊的語法可以避免這種重復,因此在一般情況下,您無法避免一定程度的重復。 但是,在您的特定情況下,您應該可以使用可選組解決問題:

\n(?P<curve>\w+)((?:.+)(?P<unit>\.\S*)((?:\s+.\s+)(?P<desc>:.+))?)?

最好用詳細模式寫成:

\n(?P<curve>\w+)
(
    .+
    (?P<unit>\.\S*)
    (
        \s+.\s+
        (?P<desc>:.+)
    )?
)?

使組嵌套更易於閱讀。 我也刪除了?:組,因為在這種情況下它們是無用的。

假設您的正則表達式正確。 為此,請使用finditer()方法來迭代所有匹配項。

例:

for m in re.finditer(r'REGEX_GOES_HERE', text):
    print m.group('curve')
    print m.group("unit")

通過這種方式,您可以選擇所有比賽,以及它們的named groups完整無缺!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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