資料集
Cider
631
Spruce
871
Honda
18813
Nissan
3292
Pine
10621
Walnut
10301
代碼
#!/usr/bin/python
import re
text = "Cider\n631\n\nSpruce\n871Honda\n18813\n\nNissan\n3292\n\nPine\n10621\n\nWalnut\n10301\n\n"
f1 = re.findall(r"(Cider|Pine)\n(.*)",text)
print(f1)
當前結果
[('Cider', '631'), ('Pine', '10621')]
題:
如何更改正則運算式以匹配除幾個指定字串之外的所有內容?前(本田|日產)
想要的結果
[('Cider', '631'), ('Spruce', '871'), ('Pine', '10621'), ('Walnut', '10301')]
uj5u.com熱心網友回復:
用插入符號 '^' 符號反轉它。
f1 = re.findall(r"(\s?^(Cider|Pine))\n(.*)",text)
請記住,插入符號(在正則運算式中)如果用作第一個字符匹配則具有特殊含義,這意味著“它是否從一行的開頭開始”。
這就是為什么人們會在開頭插入一個“不可使用的字符”。我選擇了一個可選的單個空格來用完第一個字符,從而將插入符號 (^) 的含義渲染為不是“行的開頭”,而是為了獲得所需的逆運算子。
uj5u.com熱心網友回復:
您可以排除匹配名稱或僅匹配數字,然后匹配至少以非空白字符開頭的 2 行。
^(?!(?:Honda|Nissan|\d )$)(\S.*)\n(.*)
模式匹配:
^字串的開始(?!負前瞻,斷言不是直接向右(?:Honda|Nissan|\d )$匹配任何選項,然后斷言字串的結尾
)關閉前瞻(\S.*)捕獲組 1,匹配一個非空白字符,然后是該行的其余部分\n匹配換行符(.*)捕獲組 2,匹配除換行符以外的任何字符
正則運算式演示
import re
text = ("Cider\n"
"631\n\n"
"Spruce\n"
"871\n\n"
"Honda\n"
"18813\n\n"
"Nissan\n"
"3292\n\n"
"Pine\n"
"10621\n\n"
"Walnut\n"
"10301")
f1 = re.findall(r"^(?!(?:Honda|Nissan|\d )$)(\S.*)\n(.*)", text, re.MULTILINE)
print(f1)
輸出
[('Cider', '631'), ('Spruce', '871'), ('Pine', '10621'), ('Walnut', '10301')]
如果該行應以大寫字符 AZ 開頭并且下一行應僅包含數字:
^(?!Honda|Nissan)([A-Z].*)\n(\d )$
此模式匹配:
^字串的開始(?!Honda|Nissan)負前瞻,直接向右斷言不是本田或日產([A-Z].*)捕獲組 1,匹配大寫字符 AZ 后跟該行的其余部分\n匹配換行符(\d )捕獲第 2 組,匹配 1 個數字$字串結束
正則運算式演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/316083.html
上一篇:Python正則運算式檢查信用卡
下一篇:正則運算式后視回傳無型別
