匹配直到逗号或结束行

时间:2016-03-09 06:45:04

标签: python regex pandas

我有一个像这样的pandas DataFrame:

keySet()

我想替换从第一次遇到0 UDP/ax/bsd 1 T Traffic/sa 2 ICMP/v/e,stuff hi/a/abc,ab/a 到逗号或行尾的所有内容。所以我最初尝试/,它给了我第一个字(直到第一个斜线)。

为了得到以逗号分隔的单词,我尝试了以下内容:

df.col_A.replace('/.+','',regex=True)

我的逻辑是从斜线到[逗号或EOL]替换所有内容。这没有预期的行为。我该如何修改?

数据框第2行(3)的预期输出为:

`df.col_A.replace('/.+[,$]',',',regex=True)` 

请注意,我正在尝试避免使用拆分,因为我认为这可能需要更长时间,因为它也会存储不相关的部分。

2 个答案:

答案 0 :(得分:2)

您可以使用:

 >>> print re.sub(r'/[^,]*(,|$)', ' \1', 'ICMP/v/e,stuff hi/a/abc,ab/a')
ICMP stuff hi ab

RegEx Demo

RegEx分手:

/       # match literal /
[^,]*   # match 0 or more of any character that is not comma
(,|$)   # Match comma or end of line and capture it as group #1

替换为" \1",这意味着空格后面是对组#1的反向引用

答案 1 :(得分:1)

构造[....]匹配一组字符。在这种情况下,$是一个角色。如果要匹配其他正则表达式(|是正则表达式),则应使用管道($)。我也更喜欢使用\Z代替$,并且由于普通+运算符尽可能多地使用,您需要使用+?得到最短的范围而不是吃​​掉整条线。

df.col_A.replace('/.+?(,|$)','',regex=True)

但是,由于+运算符尝试尽可能匹配,因此您可以放弃:

df.col_A.replace('/[^,]+','',regex=True)

[^,]+表示"尽可能多的不是逗号的字符。"