簡體   English   中英

正則表達式:替換字符串中的逗號,Python

[英]Regular expressions: replace comma in string, Python

以某種方式對正則表達式在python中的工作方式感到困惑,我希望替換前面帶有字母的字符串中的所有逗號,后跟字母或空格。 例如:

2015,1674,240/09,PEOPLE V. MICHAEL JORDAN,15,15
2015,2135,602832/09,DOYLE V ICON, LLC,15,15

第一行有效地有6列,而第二行有7列。 因此,我試圖用空格(NL)替換第二行中的(N,L)之間的逗號,如下所示:

2015,2135,602832/09,DOYLE V ICON LLC,15,15

這是我到目前為止所嘗試的,但沒有成功:

new_text = re.sub(r'([\w],[\s\w|\w])', "", text) 

我錯的任何想法?

非常感謝幫助!

您使用的圖案, ([\\w],[\\s\\w|\\w]) 占用了字字符(=字母數字或下划線, [\\w] a)之前, ,然后匹配的逗號,和然后匹配(並再次,消耗)1個字符 - 空格,單詞字符或文字| (在字符類內部,管道字符被視為文字管道符號,而不是交替運算符)。

所以,主要的問題是\\w匹配字母和數字。

您實際上可以利用外觀:

(?<=[a-zA-Z]),(?=[a-zA-Z\s])

請參閱正則表達式演示

(?<=[a-zA-Z])是一個正面的背后,需要一個字母在它之前,並且(?=[a-zA-Z\\s])是一個需要一個字母的正向前瞻或逗號后面有空格。

這是一個Python演示

import re
p = re.compile(r'(?<=[a-zA-Z]),(?=[a-zA-Z\s])')
test_str = "2015,1674,240/09,PEOPLE V. MICHAEL JORDAN,15,15\n2015,2135,602832/09,DOYLE V ICON, LLC,15,15"
result = p.sub("", test_str)
print(result)

如果你仍然想使用\\w ,你可以使用相反的類\\W在一個否定的字符類中排除數字和下划線:

(?<=[^\W\d_]),(?=[^\W\d_]|\s)

另一個正則表達式演示

\\w匹配azAZ0-9 ,因此你的正則表達式將替換所有逗號。 您可以嘗試以下正則表達式,並替換為\\1\\2

([a-zA-Z]),(\s|[a-zA-Z])

這是DEMO。

暫無
暫無

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

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