2016-07-06 75 views
0

删除第二个逗号后第一个逗号和之前的一切的一切,我有以下字符串:正则表达式 - 符合

55,1001wuensche.com,0,354137264,1,"0.00 %",0,"0.00 %","2016-04-24 09:00:24" 
56,100hoch3.de,47,2757361,2,"0.00 %",0,"0.00 %","2016-02-11 00:42:10" 

我想第一个逗号之前删除一切:55,56,

,一切之后第二个逗号。

结果应该是这样的,其中只有域名是左:

1001wuensche.com 
100hoch3.de 

我用记事本++做到这一点。有人有想法吗?感谢您的帮助!

+0

您是否尝试过任何pattetn? –

回答

3
^.*?,(.*?),.*$ 

捕获组$1将是前两个逗号之间的所有内容。

+1

老实说,我不喜欢回答OP的问题,但是[标签:正则表达式]中的生命是一个种族 –

+1

最后的'。*'可以是贪婪的。 (是的,我同意你的意见。正则表达式的问题似乎脱离了这个) – 4castle

+0

你是对的贪婪,我猜它会走到尽头 –

2

您可以搜索^[^,]+,([^,]+).*$1更换。

如果存在格式不良的行(包含第一个逗号前的空字符串或没有逗号的行)的机会,您可以使用更严格的模式,如^[^,\r\n]*,([^,\r\n]+).+

+0

如果第一个分组为空,那么这将失败 –

+0

如果存在行没有逗号也不会被删除。 –

+0

@WillBarnwell正在假设格式化好的输入..编辑的例外情况 –

0

另一种方法这样的事情(在更一般的意义上)是“split由逗号行,到一个数组,然后只需要该数组的第二元件。

Yet-另一种方式来做到这一点是执行两个“替代”的正则表达式,既明确地锚定到开始或到行的结尾(和第一个是“贪婪”,例如:

s/^.*\?,// 

s/\,.*$// 

概念“贪婪”是相当重要的,因为在第一如果我们想匹配至少个字符,以至于停止在处遇到第一个逗号。因此,在第二种情况下,你想想要“贪婪地”识别(并设置为空字符串)最大的匹配,你可以找到:即“其余的串。”

找到简单最明显办法做到这一点,因为,有不可避免,谁家会想有一天改变这种逻辑。或者,有人会向您发送一个违反您的“巧妙,优雅”方法的文件。认为“可测试,可维护”。