簡體   English   中英

python re.sub換行符multiline dotall

[英]python re.sub newline multiline dotall

我有這個CSV,上面寫着下一行(請注意換行符/ n):

"<a>https://google.com</a>",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
,,Dirección

我試圖刪除所有逗號並將地址放一行。 因此,在Python上我使用這個:

with open('Reutput.csv') as e, open('Put.csv', 'w') as ee:
    text = e.read()
    text = str(text)
    re.compile('<a/>*D', re.MULTILINE|re.DOTALL)
    replace = re.sub('<a/>*D','<a/>",D',text) #arreglar comas entre campos
    replace = str(replace)
    ee.write(replace)
f.close()

據我所知,re.multiline和re.dotall是滿足/ n需求的必要條件。 我正在使用re.compile,因為這是我知道添加它們的唯一方法,但顯然在這里不需要編譯它。

我怎么能用這個文字完成?

"<a>https://google.com</a>",Dirección

您根本不需要編譯語句,因為您沒有使用它。 您可以將已編譯的模式或原始模式放在re.sub函數中。 您也不需要MULTILINE標志,它與您不使用的^和$元字符的解釋有關。

問題的核心在於您正在將標志編譯為正則表達式模式,但由於您未在替換命令中使用已編譯的模式,因此無法識別它。

還有一件事。 re.sub返回一個字符串,因此不需要replace = str(replace)

這對我有用:

import re
with open('Reutput.csv') as e:
    text = e.read()
    text = str(text)
    s = re.compile('</a>".*D',re.DOTALL)
    replace = re.sub(s, '</a>"D',text) #arreglar comas entre campos
    print(replace)

如果你只是在沒有編譯的情況下調用re.sub,你需要調用它

re.sub('</a>".*D', '</a>"D', text, flags=re.DOTALL)

當然,我不確切知道你的應用程序是什么,但如果你想做的就是刪除所有的逗號和換行符,那么寫起來可能會更清楚

replace = ''.join((c for c in text if c not in ',\n'))

當您使用re.compile時,您需要保存返回的正則表達式對象,然后在其上調用sub。 你還需要一個。*來匹配任何字符,而不是匹配關閉的html標簽。 re.MULTILINE標志僅用於開始和結束字符串符號(^和$),因此在這種情況下您不需要它。

regex = re.compile('</a>.*D',re.DOTALL)
replace = regex.sub('</a>",D',text)

這應該工作。 您不需要將replace轉換為字符串,因為它已經是一個字符串。

另外,你可以編寫一個不使用的正則表達式。

replace = re.sub('"(,|\n)*D','",D',text)

暫無
暫無

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

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