这似乎是一个已经问过的问题的重复问题,但不是真的。我正在寻找的是一个或多个正则表达式,没有任何编程语言的帮助,可以将以下文本String.Concat( new string[] { "some", "random", "text", string1, string2, "end" })
更改为"some" + "random" + "text" + string1 + string2 + "end"
。
我正在考虑使用两个正则表达式,用逗号替换逗号,然后删除String.Concat( new string[] { ... })
。第二部分很简单,但我正在努力学习第一个正则表达式。我使用了一个积极的后视表达式,但它只匹配第一个逗号:(?<=String\.Concat\(new string\[\] \{[^,}]*),
我不是专家,但我认为这是正则表达式引擎的限制。匹配第一个逗号后,正则表达式引擎会在逗号之后移动起始匹配索引,并且它不再匹配它之前的后视组。
在没有任何编程语言帮助的情况下,是否有正则表达式来进行替换,而不是使用逗号?
答案 0 :(得分:0)
就像你说的那样:首先用加号替换所有逗号:
正则表达式1:/,/g
替换1:" +"
然后删除所有不必要的东西,捕获你需要的东西并使用反向引用到被捕获的组作为替换:
正则表达式2:/String\.Concat\(\s*new\s*string\s*\[\]\s*{\s*(.*?)\s*}\)/g
替换2:"$1"
(或者您可以指定反向引用)。
答案 1 :(得分:0)
答案 2 :(得分:0)
更新 Notepad ++单通解决方案
(请注意,您也可以使用 Boost extended
替换选项在 RegexFormat8 中执行此操作)
查找(?:String\.Concat\(\s*new\s*string\s*\[\]\s*{\s*([^,})]*?)\s*(?=,|}\))|\G(?!^)\s*,\s*([^,})]*?)\s*(?=,|}\)))(?:}\)|(?=(?:\s*,\s*[^,})]*)+}\)))
替换(?1$1: + $2)
(没有条件替换其+ $1$2
https://regex101.com/r/Vqe44r/1)
格式化扩展模式
(?:
String \. Concat\( \s* new \s* string \s* \[\] \s* { \s*
( [^,})]*? ) # (1)
\s*
(?= , | }\) )
|
\G
(?! ^ )
\s* , \s*
( [^,})]*? ) # (2)
\s*
(?= , | }\) )
)
(?:
}\)
|
(?=
(?:
\s* , \s*
[^,})]*
)+
}\)
)
)
输出
"some" + "random" + "text" + string1 + string2 + "end"
答案 3 :(得分:0)
你应该分两步完成。
首次替换
s/^\s*String\s*\.Concat\s*\(\s*new\s+string\[\]\s*\{\s*("[^\}]*")\s*\}\)\s*$/$1/i
让你
&#34; some&#34;,&#34; random&#34;,&#34; text&#34;,string1,string2,&#34; end&#34;
第二个
s/\s*("[^"]*"|\b\w+\b)\s*,\s*/$1 + /g
返回所需的输出
&#34;一些&#34; +&#34;随机&#34; +&#34;文字&#34; + string1 + string2 +&#34; end&#34;
检查:https://ideone.com/QuRKmt(Perl中的示例代码)。