[英]Matching newline and any character with Python regex
我有一個像
var12.1
一種
一種
dsa
88
123 !!!
secondVar12.1
var
和secondVar
之間的字符串可能不同(並且它們的計數可能不同)。
如何使用regexp轉儲它?
我正在嘗試類似的事情,但無濟於事:
re.findall(r"^var[0-9]+\.[0-9]+[\n.]+^secondVar[0-9]+\.[0-9]+", str, re.MULTILINE)
您可以使用以下方法進行抓取:
var\d+(?:(?!var\d).)*?secondVar
參見演示 。 re.S
(或re.DOTALL
)修飾符必須與此正則表達式一起使用, 以便.
可以匹配換行符 。 定界符之間的文本將在第1組中。
注意:由於(?:(?!var\\d).)*?
, 最接近的匹配項將被匹配(?:(?!var\\d).)*?
脾氣暴躁的貪婪令牌 (即,如果您在var
+ 1+個數字之后有另一個var
+一個數字,則匹配將在第二個var
和secondVar
。
注意2:您可能希望使用\\b
單詞邊界來匹配以它們開頭的單詞: \\bvar(?:(?!var\\d).)*?\\bsecondVar
。
正則表達式說明
var
匹配起始定界符 \\d+
-1個以上數字 (?:(?!var\\d).)*?
-與任何0個或多個(但盡可能少)重復的char匹配的經過調和的貪婪令牌,不會啟動char序列var
和一個數字 secondVar
-匹配secondVar
字面上。 import re
p = re.compile(r'var\d+(?:(?!var\d).)*?secondVar', re.DOTALL)
test_str = "var12.1\na\na\ndsa\n\n88\n123!!!\nsecondVar12.1\nvar12.1\na\na\ndsa\n\n88\n123!!!\nsecondVar12.1"
print(p.findall(test_str))
輸入字符串的結果(出於演示目的,我將其加倍了):
['12.1\na\na\ndsa\n\n88\n123!!!\n', '12.1\na\na\ndsa\n\n88\n123!!!\n']
您正在尋找帶有如下正則表達式的re.DOTALL
標志: var(.*?)secondVar
。 這個正則表達式將捕獲var
和secondVar
之間的所有內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.