[英]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也放在“曲線”組中。
在正則表達式中沒有特殊的語法可以避免這種重復,因此在一般情況下,您無法避免一定程度的重復。 但是,在您的特定情況下,您應該可以使用可選組解決問題:
\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.