【问题标题】:Regex - Remove everything before first comma and everything after second comma in line正则表达式 - 删除第一个逗号之前的所有内容以及第二个逗号之后的所有内容
【发布时间】:2016-11-08 19:21:50
【问题描述】:

我有以下字符串:

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

我正在使用 Notepad++ 来完成此操作。有人有想法吗?提前感谢您的帮助!

【问题讨论】:

  • 你尝试过任何模式了吗?

标签: regex replace notepad++


【解决方案1】:
^.*?,(.*?),.*$

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

【讨论】:

  • 老实说,我不喜欢 OP 不费吹灰之力地回答问题,但regex 的生活是一场竞赛
  • 最后一个.* 可能是贪婪的。 (是的,我同意你的看法。正则表达式问题似乎可以解决)
  • 你说得对,贪婪是对的,反正我猜它已经走到了尽头
  • @WillBarnwell 我想你甚至可以放弃$
  • @bobblebubble 但$ 没有伤害,并且可能使正则表达式更加高效和防白痴(“哎呀,我有多行匹配”)
【解决方案2】:

您可以搜索^[^,]+,([^,]+).* 并将其替换为$1

如果有可能出现格式不正确的行(在第一个逗号之前包含空字符串或没有逗号的行),您可以改用更严格的模式,例如 ^[^,\r\n]*,([^,\r\n]+).+

【讨论】:

  • 如果第一个分组为空,则此操作失败
  • 如果没有逗号的行也会被删除。
  • @WillBarnwell 假设输入格式正确......针对更奇怪的情况进行了编辑
  • @WiktorStribiżew 鉴于 OP 的要求,这不是问题。
【解决方案3】:

做这种事情的另一种方法(在更一般的意义上)是将“split 逗号一行,放入一个数组中,然后只取该数组的第二个元素。

另一种方法是执行两个“替代”正则表达式,都明确锚定到行首或行尾(第一个是非-“贪婪”,例如:

s/^.*\?,//

s/\,.*$//

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

找到最简单最明显的方法来做到这一点,因为不可避免地,总有一天会有人想要改变这个逻辑。或者,有人会给你一个文件,破坏你的“聪明、优雅”的方法。认为“可测试、可维护”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 2017-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-26
    相关资源
    最近更新 更多