.net - Replace string to the target format -


is there way replace string using regex or string replace

cond x > 49 300000 200000 

the expected format

cond(x > 49,300000,200000) 

my current approach string.split(" ") , convert list , insert braces @ proper indexes. problem approach string not standalone included in larger expression , comparison happens whitespace in cond abc =. right side of condition whitespace.

it impossible achieve in single pass. suggest:

  1. adding parentheses: (\p{lu}+)\s*(\p{lu}+)(.*) (replace $1($2$3))

see demo

  1. then, can use regex find spaces between numbers , replace them comma: (?<=\d+)\s+(?=\d+).

see demo (see context tab).

here working vb.net code:

dim strin string = "cond x > 49 300000 200000" dim rx2 = new regex("(\p{lu}+)\s*(\p{lu}+)(.*)") dim result2 string = rx2.replace(strin, "$1($2$3)") result2 = regex.replace(result2, "(?<=\d+)\s+(?=\d+)", ",") 

output:

enter image description here

edit: 1-regex pass:

if use matchevaluator function inside regex.replace, can make sure run regex once.

dim str3 = "cond x > 49 300000 200000 778888"     dim rx3 = new regex("(\p{lu}+)\s*(\p{lu}+.*?)(?:\s+(\d+))+")     dim result2 = rx3.replace(str3, new matchevaluator(function(m match)                         if m.groups(3).captures.count > 0                              return string.format("{0}({1} {2})",                                                m.groups(1).value,                                                m.groups(2).value,                                                string.join(",",                                                             m.groups(3).captures.cast(of capture)().select(function(n) n.value).toarray()                                                            )                                                )                          else                              return m.value                          end if                          end function)) 

result:

enter image description here


Comments