我有一個這樣的字串,分隔符是 | 字符,
string = "1234|Google | Alphabet|pest||pp| |||r"
我正在尋找的輸出是,
[1234, Google | Alphabet, pest, "", pp, " ", "", "", r]
這個我用過
output = re.split("(?<=\w)\|(?=\w)", string) # but this is giving me wrong output
這里的問題Google | Alphabet是一個單詞,因為|兩端用空格分隔。基本上,如果 a|兩邊都有空格,那么它本身就是那個單詞的一部分,否則會分開它。有人可以告訴我一個好的正則運算式來正確拆分它。我想在pandas.read_csv.
我可以撰寫一個代碼來手動處理這個問題,但我正在尋找一種更好的方法來sep (i.e., since it support regex)使用pd.read_csv
謝謝你。
uj5u.com熱心網友回復:
您還可以在左側或右側拆分斷言不是空白字符:
\|(?!\s)|(?<!\s)\|
正則運算式演示| 蟒蛇演示
import re
s = "1234|Google | Alphabet|pest||pp| |||r"
print(re.split(r"\|(?!\s)|(?<!\s)\|", s))
輸出
['1234', 'Google | Alphabet', 'pest', '', 'pp', ' ', '', '', 'r']
uj5u.com熱心網友回復:
您可以使用
\|(?<!\s\|(?=\s))
請參閱正則運算式演示。詳情:
\|- 一個|字符(?<!\s\|(?=\s))- 那不是緊跟在空格之前,而是緊跟在空格之后。
請參閱Python 演示:
import re
s = "1234|Google | Alphabet|pest||pp| |||r"
print( re.split(r'\|(?<!\s\|(?=\s))', s) )
# => ['1234', 'Google | Alphabet', 'pest', '', 'pp', ' ', '', '', 'r']
uj5u.com熱心網友回復:
另一種解決方案:
import re
s = "1234|Google | Alphabet|pest||pp| |||r"
sep = r"(?:(?<=\S)\|(?=\S))|(?:(?<=\s)\|(?=\S))|(?:(?<=\S)\|(?=\s))"
print(re.split(sep, s))
印刷:
['1234', 'Google | Alphabet', 'pest', '', 'pp', ' ', '', '', 'r']
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/491492.html
標籤:Python python-3.x 正则表达式 熊猫
上一篇:正則運算式-如何捕獲所有內容,直到另一個命名的捕獲組
下一篇:org.springframework.dao.IncorrectResultSizeDataAccessExceptionMongoLimit不起作用?
