使用正则表达式拆分(#something)

时间:2017-03-17 12:05:31

标签: c# regex

我想在c#

中使用正则表达式拆分字符串

输入:

"some1 Text (#something) someothertext (#something) some3 Text"

预期输出:

some1 Text
someothertext
some3 Text

我的代码

string str = "some1 Text (#something) someothertext (#something) some3 Text";
Regex regex = new Regex(@"\(([^)]*)\)", RegexOptions.IgnoreCase);
var result = regex.Split(str);

输出

some1 Text
#something
someothertext
#something
some3 Text

2 个答案:

答案 0 :(得分:0)

String input = "some1 Text (#One) some2 other (#something) some3 Text";
String pattern = @"\(#.*?\)";
System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex(pattern);
string output = regex.Replace(input, System.Environment.NewLine);

正则表达式的细分: \(#。*?\)

  • Escaped Left Parenthesis: \\(
  • 英镑符号:#
  • 匹配任意数量的字符:。*
  • 非贪婪的接线员:
  • Escaped Right括号: \\)

答案 1 :(得分:0)

您可以将分隔符和字段与(?<field>[^\(]+)(?<delim>\(#[^\)]*\))?匹配。您可以按名称引用每个部分,例如fielddelim。例如:

var input = "some1 Text (#One) some2 other (#something) some3 Text";
var pattern = @"(?<field>[^\(]+)(?<delim>\(#[^\)]*\))??";

var matches = Regex.Matches(input,pattern);
var fields=from match in matches.OfType<Match>()
           select match.Group["field"].Value;
foreach(var field in fields)
{
    Console.WriteLine(field);
}

结果:

some1 Text  
 some2 other  
 some3 Text 

该表达式捕获不是(作为字段的所有内容。捕获(# and)之间的任何内容作为分隔符。

捕获并不代表生成字符串。循环仅检索字段的值