簡體   English   中英

如何在python中修復這個正則表達式?

[英]How to fix this regular expression in python?

我想處理一些像這樣打印出來的字符串日期

'node0, node1 0.04, node8 11.11, node14 72.21\n'
'node1, node46 1247.25, node6 20.59, node13 64.94\n'

我想在這里找到所有浮點數,這是我使用的代碼

for node in nodes
    pattern= re.compile('(?<!node)\d+.\d+')
    distance = pattern.findall(node)

但結果是這樣的

['0.04', '11.11', '4 72']

而我想要的是這個

['0.04', '11.11', '72.21']

有關修正此正則表達式的任何建議嗎?

. 在你的表達中沒有轉義。

for node in nodes:
    pattern = re.compile(r"(?<!node)\d+\.\d+")
    distance = pattern.findall(node)

在正則表達式中,a . 字符被解釋為通配符,可以匹配(幾乎)任何字符。 因此,您的搜索模式實際上允許一個數字或一組數字,后跟任何字符,后跟另一個數字或一組數字。 要停止對點字符的這種解釋,請使用反斜杠\\對其進行轉義。

(旁白:你不需要在你的循環中編譯你的正則表達式模式。實際上,這將減慢你的代碼。)

pattern = re.compile('(?<!node)\d+\.\d+')
for node in nodes:
    distance = pattern.findall(node)
    print distance

輸出:

['0.04','11 .11','72 .21']
['1247.25','20 .59','64 .94']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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