我有一个带有标点符号和匹配括号的表单数据。我需要用空格替换标点符号并用逗号匹配大括号。还需要确保最终结果没有多个空格。
例如:
*fName * -sName!lName(London)
应该是
fName sName lName, London
尝试使用三个正则表达式并按顺序替换它们
static string BracePattern = @"[()]";
static string PuncPattern = @"[^\w\,]";
static string SpacePattern = @"\s+";
res1 = Regex.Replace(formData, BracePattern, ",");
res2 = Regex.Replace(res1, PuncPattern , ",");
res3 = Regex.Replace(res2, SpacePattern , ",").trim();
我的最终结果是:
fName sName lName,London,
仍然无法得到。我知道有一个正则表达式可以解决这个问题。但是不能得到它。
答案 0 :(得分:1)
要替换括号模式,您需要在开始和结束括号之间添加内容的捕获组,并在返回替换值的函数中使用它:
var replacedBrackets = Regex.Replace(res1,
@"\((?'content'[^)]+)\)", match => $", {match.Groups["content"].Value}");
您还可以在+
添加PuncPattern
来替换一系列标点符号'具有单个空格的字符 - 这样可以避免在第三次替换中标准化空间。
有关正常工作的演示,请参阅this fiddle。
答案 1 :(得分:0)
试试这个
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string input = "*fName * -sName!lName(London) ";
string pattern = @"(?'word'\w+)";
MatchCollection matches = Regex.Matches(input, pattern);
string output = string.Format("{0} {1} {2}, {3}",
matches[0].Groups["word"].Value,
matches[1].Groups["word"].Value,
matches[2].Groups["word"].Value,
matches[3].Groups["word"].Value
);
Console.WriteLine(output);
Console.ReadLine();
}
}
}
答案 2 :(得分:0)
如果您更喜欢非正则表达式的答案,您可以:
Trim()
所有令牌,
代码:
string line = @"*fName * -sName!lName(London) ";
var tokens = line.Split(new char[] { '*', '-', '!', '(', ')' })
.Select(s => s.Trim())
.Where(s => !String.IsNullOrWhiteSpace(s.Trim()))
.ToList();
string last = tokens.Last();
tokens.RemoveAt(tokens.Count - 1);
string result = String.Join(" ", tokens) + ", " + last;