替换用花括号括起来的逗号(但不完全)

时间:2018-03-16 15:27:45

标签: regex

这似乎是一个已经问过的问题的重复问题,但不是真的。我正在寻找的是一个或多个正则表达式,没有任何编程语言的帮助,可以将以下文本String.Concat( new string[] { "some", "random", "text", string1, string2, "end" })更改为"some" + "random" + "text" + string1 + string2 + "end"

我正在考虑使用两个正则表达式,用逗号替换逗号,然后删除String.Concat( new string[] { ... })。第二部分很简单,但我正在努力学习第一个正则表达式。我使用了一个积极的后视表达式,但它只匹配第一个逗号:(?<=String\.Concat\(new string\[\] \{[^,}]*),

我不是专家,但我认为这是正则表达式引擎的限制。匹配第一个逗号后,正则表达式引擎会在逗号之后移动起始匹配索引,并且它不再匹配它之前的后视组。

在没有任何编程语言帮助的情况下,是否有正则表达式来进行替换,而不是使用逗号?

4 个答案:

答案 0 :(得分:0)

就像你说的那样:首先用加号替换所有逗号:

正则表达式1:/,/g

替换1:" +"

然后删除所有不必要的东西,捕获你需要的东西并使用反向引用到被捕获的组作为替换:

正则表达式2:/String\.Concat\(\s*new\s*string\s*\[\]\s*{\s*(.*?)\s*}\)/g

替换2:"$1"(或者您可以指定反向引用)。

答案 1 :(得分:0)

我假设你正在使用文本编辑器:

,

取代:

+

请参阅demo

第二

.*?{(.*?)}.*

替换

$1

请参阅demo

答案 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中的示例代码)。