我如何分割線下方。如何找到一個字符的索引空間後,蟒蛇
實施例:
"DHCP discover messages : 20 DNS Requests : 20"
我想要的輸出使用正則表達式是
['DHCP discover messages', '20', 'DNS Requests', '20' ]
我如何分割線下方。如何找到一個字符的索引空間後,蟒蛇
實施例:
"DHCP discover messages : 20 DNS Requests : 20"
我想要的輸出使用正則表達式是
['DHCP discover messages', '20', 'DNS Requests', '20' ]
如果整條生產線由幾個文字:數字對,先拆應當在每個冒號完成。
然後將除了第一個和最後一個所有部件應在第一空白進行分割。
實施例的輸入字符串:
"t 1 : n1 t t 2 : n2 t t t 3 : n3"
第一split(':')
後:
["t 1 ", " n1 t t 2 ", " n2 t t t 3 ", " n3"]
split(None, 1)
上除了第一所有元素,最後一個後:
["t 1 ", ["n1", "t t 2 "], ["n2", "t t t 3 "], " n3"]
最後壓平列出並修剪任何額外的空格:
["t 1", "n1", "t t 2", "n2", "t t t 3", "n3"]
編輯:代碼示例:
def mysplit(line):
split1 = line.split(':')
last = len(split1) - 1
for i, t1 in enumerate(split1):
if i == 0 or i == last:
yield t1.strip()
else:
for t2 in t1.split(None, 1):
yield t2.strip()
testline = "t 1 : n1 t t 2 : n2 t t t 3 : n3"
testsplit = list(mysplit(testline))
print(testsplit)
# prints ['t 1', 'n1', 't t 2', 'n2', 't t t 3', 'n3']
非常感謝。這正是我所期待的。 –
嗨,我如何走到最後一步? '[「n1」,「t t 2」]'顯示爲單個元素。但是,我希望它像最後一步那樣分開。除了以** newlist [0] [0] **和'** newlist [0] [1] * * –
@RakeshNittur:你可以搜索「Python list flattening」,它已經被回答了很多次。但是,您可以在創建列表時處理此問題。查看我添加到答案的示例代碼。 – VPfB
簡單例子。
print([
(l.strip(), v.strip())
for l, v in re.findall(
"(?P<label>[^:]+):(?P<value>[ 0-9]+)",
example
)
])
[('DHCP discover messages', '20'), ('DNS Requests', '20')]
OP也想找到匹配的索引(我認爲) – CoryKramer
@CoryKramer「我需要獲取後面的數字」:「。」。 - 他需要的是價值觀,而不是指數。他認爲子串是實現它的唯一方法。 – TkTech
@ TkTech我可以將元素分割到單個列表中嗎? –
你可以這樣做:
import re
str = 'DHCP discover messages : 20 DNS Requests : 20'
[l.strip() for l in re.sub(r'(\d+) +(\w)', r'\1:\2', str).split(':')]
#['DHCP discover messages', '20', 'DNS Requests', '20']
'l'''''是古老的(在Py2中不推薦使用,而在Py3中不存在),當'l'是'str'時你沒有意義,只要測試'if l'而不與任何東西進行比較空的'str'是虛的,非空的是真的)。此外,踩壞'str'真是糟糕的形式; 'astr','mystr','s';這些都比'str'好(這會影響對'str'構造函數的訪問)。 – ShadowRanger
如果列表理解中的條件稍微好一點的正則表達式以獲得所需的結果,我將其抑制。不過,我提醒你'如果我'! –
import re
x="DHCP discover messages : 20 DNS Requests : 20"
print [i for i in re.split(r"\s*:\s*\b(\d+\b)\s*",x) if i]
輸出:['DHCP discover messages', '20', 'DNS Requests', '20']
你怎麼知道在哪裏進行分割?有時候你正在分割空白,有時候在':'(帶有周圍的空白),有時你不會在有空白的時候分割。例如,爲什麼要在'20'和'DNS'之間進行分割,而不是在'DNS'和'Requests'之間進行分割? – ShadowRanger
這也假設介於20和DNS之間的區域不是TAB字符,我認爲... –
這就是它的工作原理。 –