【问题标题】:notepad++ regex replace word in first linenotepad++ 正则表达式替换第一行中的单词
【发布时间】:2014-04-26 04:40:51
【问题描述】:

我正在尝试使用以下正则表达式在记事本++中的多个文件中进行搜索和替换

([^\n]*)(state="1")([^\n]*)*.

这会在每个文件的第一行搜索并找到 state="1" 并且工作正常。

但是,当我尝试使用以下方法替换 state="1" 时:

Replace with: $1 state="5"

它切断了线路的其余部分。

我认为有可能使用以下方法获取该行的其余部分:

Replace with: $1 state="5" $2

但是,$2 似乎并不作为变量存在。

有没有办法把剩下的行附加到变量 $2 中?

干杯

这里有一张图片来展示如何 (?=\A[^\n]*)state="1" 不工作

我已经更新了我的记事本++版本和所有内容

【问题讨论】:

    标签: regex replace notepad++


    【解决方案1】:

    每个捕获组(…) 都分配有一个编号,因此$2 代表第二个捕获组(state="1")。该行的其余部分在$3 中捕获。

    要么删除state="1" 周围的捕获组:

    ([^\n]*)state="1"([^\n]*)*.
    

    或者使用$3:

    Replace with: $1 state="5" $3
    

    另外,鉴于任务的简单性,我不明白您为什么不能只搜索state="1" 并替换为state="5"。这里似乎不需要正则表达式。


    更新 目前列出的模式中没有任何内容将结果限制为匹配第一行上的字符串。如果您需要,我建议使用这样的模式:

    (?=\A[^\n]*)state="1"
    

    使用这些设置:


    更新 后面的 \A(文本开头)锚点似乎有一些奇怪的行为。从后视中移除似乎有效。试试这个模式:

    \A([^\n]*)state="1"
    

    并替换为:

    $1state="5"
    

    所有其他设置都应该没问题。

    【讨论】:

    • 这真的很奇怪,当我尝试在记事本++中打开的文件中替换为 $3 时,它会正确替换第一行,但是当我尝试在多个文件中执行此操作时,它会替换每次出现(不仅仅是第一行的那些)
    • hmmn 奇怪,(?=\A[^\n]*)state="1" 这个正则表达式似乎没有找到任何 state="1"
    • @Ke。我测试了它,它似乎工作。如果您在单个文件中进行测试,您可能想尝试启用“环绕”。
    • 奇怪的是它只是说“找不到文本 (?=\A[^\n]*)state="1"" :/ 我所有的设置都和你的完全一样,并尝试过自动换行
    • @Ke。您能否展示您正在使用的文件类型的简短示例?我使用一个文件进行了测试,该文件只是在 3 个单独的行上重复了 state="1"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-01
    • 1970-01-01
    • 2015-05-21
    • 1970-01-01
    • 2014-06-04
    • 1970-01-01
    相关资源
    最近更新 更多