我试图在Notepad ++中创建一个正则表达式,只是一个简单的搜索和替换。
以下是这些行:
msgid“”
“ CONSUMPTION_PLAN_ERR |制成品的BOM已更改 因为添加了产品。\ n“
“要在新BOM表中继续使用此Job,请更新 很多和到期。\ n“
“以前的生产记录将不会更新。\ n”
msgstr“”
“自生产开始,成品的BOM已更改 添加。\ n“
“要在新BOM表中继续使用此Job,请更新 很多和到期。\ n“
“以前的生产记录将不会更新。\ n”
我需要更改双引号,但仅在msgid部分上。这些双引号应更改为小于<和大于>符号,因此结果如下:
msgid <>
<要在新BOM表中继续使用此Job,请更新 很多和到期。\ n>
<以前的生产记录将不会更新。\ n>
msgstr“”
“自生产开始,成品的BOM已更改 添加。\ n“
“要在新BOM表中继续使用此Job,请更新 很多和到期。\ n“
“以前的生产记录将不会更新。\ n”
无论需要更改多少行,我都需要一个与上述多行示例匹配的正则表达式模式。
我使用此模式进行搜索:
msgid ""\r\n("(.+?)"\r\n){1,}
要替换的模式:
msgid <>\r\n<\2>\r\n
哪个可以工作,但不完全是我想要的。它仅复制最后一行,而不复制上面的两行。我做错了事,但不知道那是什么。
建议?
答案 0 :(得分:0)
您可以使用正则表达式,但这并不简单,并且效率不高。一种更有效的解决方案是编写一个解析器,或者使用一种更灵活的编程语言来使用至少两个正则表达式的组合:一种将提取块,而第二种将替换引号。
单个正则表达式解决方案如下
查找内容:(?s)(?:\G(?!^(?<=.))|^msgid)(?:(?!^msg(?:id|str))[^"])*?\K"((?:(?!^msg(?:id|str))[^"])*?)"
替换为:<$1>
请参见regex demo。
详细信息
(?s)
-与 .
相同,当启用时会匹配换行符 (?:\G(?!^(?<=.))|^msgid)
-行(^
)的开头,然后是msgid
,或(|
)上次成功匹配(\G(?!^(?<=.))
)的结尾(?:(?!^msg(?:id|str))[^"])*?
\K
-匹配重置运算符,匹配缓冲区被清除"
-一个"
((?:(?!^msg(?:id|str))[^"])*?)
-捕获组1:
(?:(?!^msg(?:id|str))[^"])*?
-除"
以外的其他任何不超过msgid
或msgstr
字符序列的字符,任何0或更多,但尽可能少在一行的开头"
-一个"
。