簡體   English   中英

Python:正則表達式在匹配項之間進行匹配

[英]Python: regex to match between matches

文本文件輸出的語法形式為word> data <word ,其中需要刪除括號。 data部分幾乎可以是任何東西(且長度可變),包括換行,空格,點,字母等。目前我正在使用...

text = re.sub("(>)(.{1,10})(<)", r"\2", text)

...但是它有明顯的局限性,1是長度。 不使用*的原因是因為存在一些限制,即:

  • 除其邊界外,匹配項中不能存在其他><
  • 只有匹配內1號可形成的位數的圖案,即dog> 7 4^ 8 0 . 2 1 6? <cat dog> 7 4^ 8 0 . 2 1 6? <cat dog> 7 4^ 8 0 . 2 1 6? <catexam> 1961 5 . 66 9 <ple exam> 1961 5 . 66 9 <ple不匹配,而test> 0? <string test> 0? <stringover> 1980 31, 6 000 <flow很好,應除去括號

如何解決?

為什么不這樣呢?

text = re.sub(r">((?:[^<>\d]|\d{2,})*)<", r"\1", text)

(?:[^<>\\d]|\\d{2,})*匹配除尖括號或數字( [^<>\\d] )以外的任何字符,或匹配至少兩個數字( \\d{2,} ),重復( * )。

由於在一個問題進行一次編輯后,沒有一個回答者將答案添加到他們的答案中,所以我不得不發布另一個問題來回答這一部分並實際上完成了正則表達式。

最后,我正在使用的最終代碼是:

text = re.sub(r">((?!(?:[^<]*\\b\\d\\b){2})[^><]*)<", r"\\1", text)

它只允許1個數字,並且比賽中沒有方括號,否則會捕獲其他任何內容。

暫無
暫無

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

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