【问题标题】:find a string and replace a pattern before it - Notepad++查找一个字符串并替换它之前的模式 - Notepad++
【发布时间】:2017-04-23 04:06:52
【问题描述】:

我正在尝试使用记事本++

输入文件有模式
(括号中的质量)

-- "command xyz d 
   command rererere 
   command ;" ( fair quality)
---- "command xyz d 
   command rereredfdfdre 
   command ffdfdfdf ;" ( good quality)
---- "command xffddyz d 
   command rerfdferere 
   command ;" ( good quality)
----"command fdfdfxyz d 
   command refffdrerere 
   command fdfdff;" (    fair quality)

我想做的是
--查找所有存在( fair quality ) 的实例(注意( and fair 之间的间距是可变的,然后用( fair quality ) 删除整个语句
o/p 是这样的:

---- "command xyz d 
   command rereredfdfdre 
   command ffdfdfdf ;" ( good quality)
---- "command xffddyz d 
   command rerfdferere 
   command ;" ( good quality)

我尝试了一些基本的正则表达式替换搜索 ( fair quality),但是如何删除 from x to y 之前的整个字符串?
请不要假设间距模式是规则的。会变的
例如

"command    xyz..(   fair quality);"
"command  xyz (fair quality   );"

2 个字符串之间的间距没有任何规律性,这可用于正则表达式工作。
有时也有不必要的换行符,例如

"command    
xyz..(   fair 
quality);"

所以行尾假设也无济于事 所以精确的正则表达式逻辑将是
-- 去找我fair的实例
-- 在fair 实例之前找到command 的第一个实例
-- 在command 之前找到" 的第一个实例。我们将其称为X
-- 在fair 之后找到" 的第一个实例。我们将其称为Y
-- 从X删除到Y

【问题讨论】:

    标签: regex string replace pattern-matching notepad++


    【解决方案1】:

    你可以这样做:

    • 查找内容:-+\s*"[^"]+?"\s*\(\s*fair quality\)
    • 替换为:NOTHING
    • 全部替换

    说明:

    -+              : one or more dash
    \s*             : 0 or more spaces
    "               : a double quote
    [^"]+?          : one or more any character that is not a double quote
    "               : a double quote
    \s*             : 0 or more spaces
    \(              : an open parenthesis
    \s*             : 0 or more spaces
    fair quality    : literally 'fair quality'
    \)              : a close parenthesis
    

    【讨论】:

      【解决方案2】:

      你需要带有temper greedy token solution的正则表达式

      找到

      -*\s*"command\b((?!\bquality\b\s*\)).)*\(\s*fair\s+quality\s*\)(;")?\r?\n?
      

      替换为空,确保正则表达式和.匹配换行符被选中

      正则表达式详细信息:

      • -*\s*"command\b - 在命令之前匹配“”的第一个实例
      • ((?!\bquality\b\s*\)).)* - 匹配任何不属于的字符 quality)带脾气贪婪令牌
      • \(\s*fair\s+quality\s*\)(;")?\r?\n? - 匹配 fair quality 部分, 包括;" 和后面的换行符

      输入测试

      -- "command xyz d 
         command rererere 
         command ;" ( fair quality)
      ---- "command xyz d 
         command rereredfdfdre 
         command ffdfdfdf ;" ( good quality)
      ---- "command xffddyz d 
         command rerfdferere 
         command ;" ( good quality)
      ----"command fdfdfxyz d 
         command refffdrerere 
         command fdfdff;" (    fair quality)
        ----"command fdfdfxyz d 
         command refffdrerere 
      command    
      xyz..(   fair 
      quality);"
      "command    xyz..(   fair quality);"
      "command  xyz (fair quality   );"
      

      输出

      ---- "command xyz d 
         command rereredfdfdre 
         command ffdfdfdf ;" ( good quality)
      ---- "command xffddyz d 
         command rerfdferere 
         command ;" ( good quality)
      

      【讨论】:

        猜你喜欢
        • 2014-02-26
        • 2014-07-17
        • 1970-01-01
        • 2017-01-17
        • 1970-01-01
        • 2020-09-21
        • 1970-01-01
        • 2021-03-16
        • 2011-12-08
        相关资源
        最近更新 更多