python3中的正则表达式

2024-10-01 19:23:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚开始在python代码中使用正则表达式。我有一个字符串,里面有6个逗号。其中一个逗号位于两个引号之间。我想去掉引号和最后一个逗号。在

输入:

string = 'Fruits,Pear,Cherry,Apple,Orange,"Cherry,"'

我想要这个输出:

^{pr2}$

我的代码输出:

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),它的文本与引号之间的文本相同!这样可以减少逗号的数量(从6个减少到4个),因为它合并了两个字段(Cherry和Apple),我希望只剩下5个逗号。在

fullString = '2000-04-24 12:32:00.000,22186CBD0FDEAB049C60513341BA721B,0DDEB5,COMP,Ch‌​erry Corp.,DE,100,0.57,100,31213C678CC483768E1282A9D8CB524C,365.0‌​0000,business,acquis‌​itions-mergers,acqui‌​sition-bid,interest,‌​acquiree,fact,,,,,,,‌​,,,,,,acquisition-in‌​terest-acquiree,Cher‌​ry 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,DN2000042400‌​0597,"Cherry Corp. Gets Buyout Offer From Chairman President,"\n'

非常感谢


Tags: 代码文本reapplestring引号cherrypear
3条回答

最好的方法是使用支持(*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。在

对于不需要正则表达式的任务,只需使用replace

string = 'Fruits,Pear,Cherry,Apple,Orange,"Cherry,"'
new_string = string.replace('"').strip(',')

为什么不简单地使用这个:

>>>ans_string=string.replace('"','')[0:-1]

输出

^{pr2}$

为了简单和algorithmic complexity.

相关问题 更多 >

    热门问题