2015-10-06 3 views
1

Я пытаюсь заменить текст в строке с помощью регулярного выражения. Я выполнил его в C# с использованием одного и того же шаблона, но в быстрой работе он не работал по мере необходимости.String Замена в Regex

Вот мой код:

var pattern = "\\d(\\()*[x]" 

let oldString = "2x + 3 + x2 +2(x)" 

let newString = oldString.stringByReplacingOccurrencesOfString(pattern, withString:"*" as String, options:NSStringCompareOptions.RegularExpressionSearch, range:nil) 


print(newString) 

То, что я хочу после замены является:

"2 * х + 3 + x2 + 2 * (х)"

То, что я получаю, это:

"* + 3 + x2 + *)"

ответ

1
Try this: 

(?<=\d)(?=x)|(?<=\d)(?=\() 

This pattern matches not any characters in the given string, but zero width positions in between characters. 

For example, (?<=\d)(?=x) This matches a position in between a digit and 'x' 

(?<= is look behind assertion (?= is look ahead. 

(?<=\d)(?=\() This matches the position between a digit and '(' 

So the pattern before escaping: 

(?<=\d)(?=x)|(?<=\d)(?=\() 

Pattern, after escaping the parentheses and '\' 

\(?<=\\d\)\(?=x\)|\(?<=\\d\)\(?=\\\(\)