【问题标题】:RegEx - How to select the second comma and everything after itRegEx - 如何选择第二个逗号及其后的所有内容
【发布时间】:2017-10-23 16:37:28
【问题描述】:

我正在使用 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 风格的 RegEx。 我需要选择第二个逗号和行尾的所有内容并将其删除。

使用 regexpal.com 我尝试了几种不同的方法,但无法弄清楚。

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

我不知道如何选择第二个及以后的命令。

我还搜索了 StackOverflow 并找到了几个示例,但无法将它们更改为适合我。

谢谢。

【问题讨论】:

  • 尝试 ^([^,]*,[^,]*),.* 并用 Unix 正则表达式选项替换为 \1
  • @BenShelton 当您不对分组标记应用任何量词时,为什么还要使用非捕获组? ,.*, 在语义上不是相同的吗?另外,我认为这不是 OP 想要删除的内容
  • 在 Regexpal.com 中,^([^,]*,[^,]*),.* 选择了整行,UltraEdit 没有找到匹配项。
  • @BradAskins:它确实选择了整行,但如果您替换为\1,则应该保留到第二个, 的行的开头。见regex101.com/r/1mGaCM/1
  • @BradAskins 它应该选择整行,但随后您使用捕获组将整行替换为您要保留的部分。对于 UltraEdit 部分,您是否碰巧知道他们的正则表达式实现是什么?

标签: regex ultraedit


【解决方案1】:

您可以使用具有以下模式的 Perl 正则表达式选项:

^([^,]*,[^,]*),.*

并替换为\1

请参阅regex demo

详情

  • ^ - 字符串开头
  • ([^,]*,[^,]*) - 第 1 组(后来用替换模式中的 \1 反向引用引用):
    • [^,]* - 除逗号外的任何 0+ 字符(为防止跨行溢出,请将 \n\r 添加到否定字符类中 - [^,\n\r]*
    • , - 逗号
    • [^,]* - 除逗号外的任何 0+ 个字符
  • , - 逗号
  • .* - 尽可能多的除换行符以外的任何 0+ 字符

【讨论】:

  • 相关,我用^([^,]*,[^,]*),来选择第二个逗号,以及它之前的所有内容。
猜你喜欢
  • 2016-11-08
  • 1970-01-01
  • 1970-01-01
  • 2022-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-25
  • 1970-01-01
相关资源
最近更新 更多