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