簡體   English   中英

使用Python正則表達式匹配換行符和任何字符

[英]Matching newline and any character with Python regex

我有一個像

var12.1
一種
一種
dsa

88
123 !!!
secondVar12.1

varsecondVar之間的字符串可能不同(並且它們的計數可能不同)。

如何使用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 +一個數字,則匹配將在第二個varsecondVar

注意2:您可能希望使用\\b單詞邊界來匹配以它們開頭的單詞: \\bvar(?:(?!var\\d).)*?\\bsecondVar

正則表達式說明

  • var匹配起始定界符
  • \\d+ -1個以上數字
  • (?:(?!var\\d).)*? -與任何0個或多個(但盡可能少)重復的char匹配的經過調和的貪婪令牌,不會啟動char序列var和一個數字
  • secondVar -匹配secondVar字面上。

IDEONE演示

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 這個正則表達式將捕獲varsecondVar之間的所有內容。

暫無
暫無

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

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