簡體   English   中英

在正則表達式中重復大元素

[英]Repeating large elements in a regular expression

我有以下正則表達式:

_parser = re.compile('''
                    (?P<a>-?[0-9]+(\.[0-9]+)?(/-?[0-9]+(\.[0-9]+)?)?)?x[+\-]
                    (?P<b>-?[0-9]+(\.[0-9]+)?(/-?[0-9]+(\.[0-9]+)?)?)?y[+\-]
                    (?P<c>-?[0-9]+(\.[0-9]+)?(/-?[0-9]+(\.[0-9]+)?)?)?=0
                    ''', re.VERBOSE)

這顯然有很多重復,所以讓我想知道,在單個表達式中重復相似表達式的塊的語法(如果存在)是什么?

你可以這樣做:

[0-9]+(\\.[0-9]+)?(/-?[0-9]+(\\.[0-9]+)包圍在另一個捕獲組中,然后用\\2引用\\2 ,因為它是正則表達式中的第二個開放式括號:

_parser = re.compile('''
     (?P<a>-?([0-9]+(\.[0-9]+)?(/-?[0-9]+(\.[0-9]+))?)?)?x[+\-]
              (?P<b>-?\2?)?)?y[+\-]
                (?P<c>-?\2?)?)?=0
                ''', re.VERBOSE)

您還可以通過創建正則表達式的字符串,然后重復使用該字符串變量來執行此操作。 我不了解Python,但是在Java中會是這樣:

String sRegexPiece = "[0-9]+(\\.[0-9]+)?(/-?[0-9]+(\\.[0-9]+)";
String sRegexWhole = "(?P<a>-?" + sRegexPiece + "?)?x[+\-]" + sLS + //sLS: line separator
    "(?P<b>-?" + sRegexPiece + "?)?)?y[+\-]" + sLS + 
    "(?P<c>-?" + sRegexPiece + "?)?)?=0" + sLS + 
    "'''";
Pattern p = Pattern.compile(sRegexWhole);

暫無
暫無

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

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