正则表达式 - 如何选择第二个逗号及其后面的所有内容

4

我是使用UltraEdit的。我有一个文本文件,其中包含类似以下字符串:

Workspace\\Trays\\Dialogs\\Components, Expand, kThisComputerOnly, P_BOOLEAN },
WebCommonDialog Sign_Out, Left, kThisComputerOnly, P_INTEGER_RANGE(0, 4096) },
ThreeDTextDlg, x, kThisComputerOnly, P_INTEGER_RANGE(0, 4096) },
Preferences\\Graphics, CtxDbgMaxGLVersionMajor, kThisComputerOnly, P_INTEGER },

UltraEdit支持PERL、UNIX和UltraEdit风格的正则表达式。我需要选择第二个逗号和行尾的所有内容并将其删除。

我尝试了几种不同的方法,但在regexpal.com上无法解决它。

/,\s.+/ selects the first comma
/[,]\s.+/ same as above

我无法弄清如何选择第二个及以后的命令。

我也在StackOverflow上搜索了几个示例,但无法将它们更改为适用于我的情况。

谢谢。


2
尝试使用带有 Unix 正则选项的 ^([^,]*,[^,]*),.* 进行替换,并将其替换成 \1 - Wiktor Stribiżew
1
@BenShelton 如果你不对分组的标记应用任何量词,为什么还要使用非捕获性分组呢?,.*, 不是语义上相同吗?此外,我认为这不是 OP 想要删除的内容。 - Aaron
在 Regexpal.com 上,^([^,]*,[^,]*),.* 选中了整行,但 UltraEdit 没有找到匹配项。 - Brad Askins
@BradAskins:它确实选择了整行,但如果你用\1替换,那么从行开头到第二个,的部分应该保留。请参见https://regex101.com/r/1mGaCM/1 - Wiktor Stribiżew
@BradAskins,它应该选择整行,但是然后你使用捕获组来替换整行为你想要保留的部分。对于UltraEdit部分,你知道他们的正则表达式实现吗? - Aaron
显示剩余2条评论
1个回答

7
您可以使用 Perl 正则表达式选项来匹配以下模式:
^([^,]*,[^,]*),.*

并将其替换为\1

请参阅正则表达式演示

详细信息

  • ^ - 字符串的开头
  • ([^,]*,[^,]*) - 第一组(在替换模式中稍后用\1反向引用):
    • [^,]* - 除逗号之外的任何0个或多个字符(为了避免跨行溢出,将\n\r添加到否定字符类中- [^,\n\r]*
    • , - 一个逗号
    • [^,]* - 除逗号之外的任何0个或多个字符
  • , - 一个逗号
  • .* - 除换行符之外的任意0个或多个字符,尽可能多地匹配

相关的,我使用了 ^([^,]*,[^,]*), 来选择第二个逗号及其前面的所有内容。 - Julian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接