簡體   English   中英

如何使用 RegEx 提取鍵之間的值?

[英]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.

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