[英]How to extract the value between the key using RegEx?
我有這樣的文字:
"abababba"
我想將字符提取為 a 之間a
列表。 對於上面的文字,我期待 output 像:
['b', 'b', 'bb']
我用過:
re.split(r'^a(.*?)a$', data)
但它不起作用。
您可以使用 re.findall 以模式返回捕獲組值:
a([^\sa]+)(?=a)
a
a
([^\sa]+)
捕獲組 1,重復匹配除a
以外的任何字符(如果您不想匹配空格,則為 whitspace 字符)(?=a)
正向前瞻,向右斷言a
import re
pattern = r"a([^\sa]+)(?=a)"
s = "abababba"
print(re.findall(pattern, s))
Output
['b', 'b', 'bb']
您可以使用列表推導來實現此目的:
s = "abababba"
l = [x for x in s.split("a") if not x == ""]
print(l)
Output:
['b', 'b', 'bb']
^ 和 $ 將僅分別匹配行的開頭和結尾。 在這種情況下,您將使用以下行獲得所需的列表:
re.split(r'a(.*?)a', data)[1:-1]
為什么不使用正常拆分:
"abababba".split("a") --> ['', 'b', 'b', 'bb', '']
並根據需要刪除空部分:
# remove all empties:
[*filter(None,"abababba".split("a"))] -> ['b', 'b', 'bb']
或者
# only leading/trailing empties (if any)
"abababba".strip("a").split("a") --> ['b', 'b', 'bb']
或者
# only leading/trailing empties (assuming always enclosed in 'a')
"abababba".split("a")[1:-1] --> ['b', 'b', 'bb']
如果您必須使用正則表達式,也許 findall() 會讓您使用更簡單的模式,同時覆蓋所有邊緣情況(忽略所有空):
re.findall(r"[^a]+","abababba") --> ['b', 'b', 'bb']
re.findall(r"[^a]+","abababb") --> ['b', 'b', 'bb']
re.findall(r"[^a]+","bababb") --> ['b', 'b', 'bb']
re.findall(r"[^a]+","babaabb") --> ['b', 'b', 'bb']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.