我在这里是新手,只是开始在我的python代码中使用正则表达式。我有一个里面有6个逗号的字符串。逗号之一放在两个引号之间。我想删除引号和最后一个逗号。
输入:
string = 'Fruits,Pear,Cherry,Apple,Orange,"Cherry,"'
我想要这个输出:
string = 'Fruits,Pear,Cherry,Apple,Orange,Cherry'
我的代码的输出:
string = 'Fruits,Pear,**CherryApple**,Orange,Cherry'
这是我在python中的代码:
if (re.search('"', string)):
matches = re.findall(r'\"(.+?)\"',string);
matches1 = re.sub(",", "", matches[0]);
string = re.sub(matches[0],matches1,string);
string = re.sub('"','',string);
我的问题是,我想给出一个条件,该代码仅适用于最后一位(“ Cherry”),但不幸的是,它会影响中间的其他单词(Cherry,Apple),该中间的文本与引号!由于合并了两个字段(Cherry,Apple),所以我减少了逗号的数量(从6个减少到4个),并且我希望剩下5个逗号。
fullString = '2000-04-24 12:32:00.000,22186CBD0FDEAB049C60513341BA721B,0DDEB5,COMP,Cherry Corp.,DE,100,0.57,100,31213C678CC483768E1282A9D8CB524C,365.00000,business,acquisitions-mergers,acquisition-bid,interest,acquiree,fact,,,,,,,,,,,,,acquisition-interest-acquiree,Cherry Corp. Gets Buyout Offer From Chairman President,FULL-ARTICLE,B5569E,Dow Jones Newswires,0.04,-0.18,0,0,1,0,0,0,0,1,1,5,RPA,DJ,DN20000424000597,"Cherry Corp. Gets Buyout Offer From Chairman President,"\n'
提前谢谢了
最佳答案
最好的方法是使用支持regex
的更新的(*SKIP)(*FAIL)
模块:
import regex as re
string = 'Fruits,Pear,Cherry,Apple,Orange,"Cherry,"'
# parts
rx = re.compile(r'"[^"]+"(*SKIP)(*FAIL)|,')
def cleanse(match):
rxi = re.compile(r'[",]+')
return rxi.sub('', match)
parts = [cleanse(match) for match in rx.split(string)]
print(parts)
# ['Fruits', 'Pear', 'Cherry', 'Apple', 'Orange', 'Cherry']
在这里,您可以将双引号之间的所有内容匹配起来,然后再将其丢弃,因此,拆分操作仅使用引号外的逗号。其余的是具有清理功能的列表理解。
请参见a demo on regex101.com。