【问题标题】:Delete everything between two characters in each line删除每行两个字符之间的所有内容
【发布时间】:2017-10-11 15:59:04
【问题描述】:

对于每一行,如何删除第 5 次 出现 "最后 出现 . 之间的所有内容,不包括在内?要删除的部分包含任意数量和可变模式的有问题(对于正则表达式)字符,例如 :/\()[]|.,?" 等。

例如:

"123456789","xyxyxy","DELETE///.T.H.I.S.aaa"
"123","abc","DELETE."\T.H.I.S\[.]".1234"

"123456789","xyxyxy",".aaa"
"123","abc",".1234"

我总是失败(可能是因为有问题的字符转义不正确?)。

【问题讨论】:

    标签: regex text notepad++


    【解决方案1】:

    试试这个正则表达式: ((?:[^"\n]*"){5})(.*)(\..*)$

    Click for Demo

    说明:

    • ^ - 断言字符串的开头
    • (?:[^"\n]*") - 匹配 0+ 次出现的任何既不是 " 也不是换行符且贪婪地后跟 " 的字符
    • {5} - 重复上述匹配 5 次。到目前为止匹配的所有内容都被捕获在第 1 组中。
    • (.*) - 贪婪地匹配并捕获 0+ 次出现的任何字符,但不是换行符。这被存储为 group2。这部分稍后将被删除/删除。贪婪匹配,因为我们现在想要到达最后一个.。我们可以通过回溯到达那里(在下一步中)
    • (\..*) - 匹配一个点,后跟 0+ 次出现的任何字符,但换行符并存储在第 3 组中
    • $ - 断言字符串的结尾

    输出:

    更换前:

    更换后:

    【讨论】:

      【解决方案2】:

      不确定它是否与 notepad++ 兼容,但这个正则表达式应该可以完成工作:

      ((?:"[^"]*){4}").*(\..*)
      

      替换:

      \1\2
      

      示例及说明:https://regex101.com/r/yBuUOj/3

      【讨论】:

      • 谢谢!您的初始版本(现已删除)工作正常:((?:"[^"]*){4}")[^"]*\.(.*)(它删除了最后一个 .,但我可以忍受。(***您当前的版本 ((?:"[^"]*){4}").*\.(.*) 会产生一些误认)
      • 抱歉,我在此处和 regex101 之间做了一些复制和粘贴操作
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-22
      • 2012-05-28
      • 2011-01-09
      • 2021-05-20
      • 2011-08-07
      • 2020-06-30
      • 1970-01-01
      相关资源
      最近更新 更多