我有這樣的文字:
"abababba"
我想將字符提取為a. 對于上述文本,我期望輸出如下:
['b', 'b', 'bb']
我用過了:
re.split(r'^a(.*?)a$', data)
但它不起作用。
uj5u.com熱心網友回復:
您可以使用 re.findall 回傳具有以下模式的捕獲組值:
a([^\sa] )(?=a)
a匹配一個a字符([^\sa] )捕獲組 1,重復匹配任何字符除外a(如果您不想匹配空格,則為空白字符)(?=a)正向前瞻,a向右斷言
正則運算式演示
import re
pattern = r"a([^\sa] )(?=a)"
s = "abababba"
print(re.findall(pattern, s))
輸出
['b', 'b', 'bb']
uj5u.com熱心網友回復:
您可以使用串列理解來實作這一點:
s = "abababba"
l = [x for x in s.split("a") if not x == ""]
print(l)
輸出:
['b', 'b', 'bb']
uj5u.com熱心網友回復:
^ 和 $ 將分別只匹配一行的開頭和結尾。在這種情況下,您將使用以下行獲得所需的串列:
re.split(r'a(.*?)a', data)[1:-1]
uj5u.com熱心網友回復:
為什么不使用正常拆分:
"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']
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/377514.html
下一篇:如何在正則運算式中包含特殊字符?
