我试图在Notepad++中创建一个正则表达式,只是一个简单的搜索和替换。
这些线路如下:
“msgid” “自添加生产以来,CONSUMPTION_PLAN_ERR|The成品的BOM已更改。\n” “若要在新的BOM中继续使用此职务,请更新批次和费用。\n” “以前的生产记录将不会更新。\n” msgstr "“ “成品的BOM自添加后已更改。\n” “若要在新的BOM中继续使用此职务,请更新批次和费用。\n” “以前的生产记录将不会更新。\n”
我需要更改双引号,但只对msgid部分。这些双引号应更改为小于<和大于>符号,因此结果如下:
msgid <> < CONSUMPTION_PLAN_ERR|The changed‘s BOM自从生产added.\n>以来发生了变化 <若要在新的BOM中继续使用此作业,请更新批量和expiries.\n> <以前的生产记录不会是updated.\n> msgstr "“ “成品的BOM自添加后已更改。\n” “若要在新的BOM中继续使用此职务,请更新批次和费用。\n” “以前的生产记录将不会更新。\n”
无论需要更改多少行,我都需要一个与上面这样的多行示例相匹配的regex模式。
我使用这个模式搜索:
msgid ""\r\n("(.+?)"\r\n){1,}这一模式取代了:
msgid <>\r\n<\2>\r\n有点效果,但不是我想要的。它只复制最后一行,但不复制上面两行。我做错了什么,但不知道是什么。
有什么建议吗?
发布于 2018-10-12 20:44:50
您可以使用regex,但它并不简单,也不会有效。更有效的解决方案是编写解析器,或者使用更灵活的编程语言来使用至少两个regexp的组合:一个提取块,另一个替换引号。
一个regex解决方案看起来像
找到什么:(?s)(?:\G(?!^(?<=.))|^msgid)(?:(?!^msg(?:id|str))[^"])*?\K"((?:(?!^msg(?:id|str))[^"])*?)"
替换为:<$1>
见regex演示。
详细信息
(?s) -与.匹配(?:\G(?!^(?<=.))|^msgid) -开始一行(^),然后是msgid,或者(|)上一次成功比赛的结束(\G(?!^(?<=.)))(?:(?!^msg(?:id|str))[^"])*?\K -匹配重置操作符,匹配缓冲区将被清除。" -a "((?:(?!^msg(?:id|str))[^"])*?) -捕获组1:(?:(?!^msg(?:id|str))[^"])*? -除了"以外,任何0或更多但尽可能少出现的字符都不会在行的开头启动msgid或msgstr字符序列。
" -a ".

https://stackoverflow.com/questions/52785995
复制相似问题