2013-10-17 208 views
1

,所以我有一个包含每个位置逗号分隔值,像这样的字符串列表:替换逗号分隔值

AUSTIN,ORL2,ORL6 
CHA,INDY 

等。有没有办法使用正则表达式匹配的值并替换/重用匹配的值来生成一个新的字符串,是这样的:据我所知,采用分体式(“”),然后通过循环

<a href='details.aspx?location=AUSTIN'>AUSTIN</a>, <a href='details.aspx?location=ORL2'>ORL2</a>, <a href='details.aspx?location=ORL6'>ORL6</a> 
<a href='details.aspx?location=CHA'>CHA</a>, <a href='details.aspx?location=INDY'>INDY</a> 

结果数组更容易,但在我的特殊情况下,我想知道是否可以生成新的字符串而不必分割和循环每个列表位置。

谢谢你的帮助。

+8

当然可能,但可能不会给你带来任何显着的性能提升,它可能会让下一个碰到它的人感到困惑。 – Ocelot20

+0

正则表达式是这个工作的错误工具。如果你知道你的数据总是和你在问题中显示的一样简单,那么做一个简单的分割(“,”)。否则,请考虑使用CSV库,例如http://www.codeproject.com/Articles/9258/A-Fast-CSV-Reader或甚至内置的Oledb提供程序。 –

回答

2

没有明确的循环(虽然没有正则表达式)...

var list = "AUSTIN,ORL2,ORL6"; 
Console.WriteLine(string.Join(",",list.Split(',').Select(x=> "<a href='details.aspx?location="+x+"'>"+x+"</a>").ToArray())); 

//输出

<a href='details.aspx?location=AUSTIN'>AUSTIN</a>,<a href='details.aspx?location=ORL2'>ORL2</a>,<a href='details.aspx?location=ORL6'>ORL6</a> 
1

Ocelot20说这一切。

然而,这是一个使用正则表达式的快速程序:

using System; 
using System.Text.RegularExpressions; 

public class Example 
{ 
    public static void Main() 
    { 
     string pattern = @"\w+"; 
     Regex regex = new Regex(pattern); 
     string sentence = "AUSTIN,ORL2,ORL6\nCHA,INDY"; 

     foreach (Match match in regex.Matches(sentence)) 
     { 
      Console.WriteLine("<a href='details.aspx?location={0}'>{0}</a>", 
           match.Value); 
     } 
    } 
} 

输出是:

<a href='details.aspx?location=AUSTIN'>AUSTIN</a> 
<a href='details.aspx?location=ORL2'>ORL2</a> 
<a href='details.aspx?location=ORL6'>ORL6</a> 
<a href='details.aspx?location=CHA'>CHA</a> 
<a href='details.aspx?location=INDY'>INDY</a> 
0

你可以这样做:

string input = "Austin,Dallas"; 
string format = "<a href='details.aspx?location=$1'>$1</a>\n"; 

var newStr = new Regex(@"(\w+),?").Replace(input, format); 

但正如我之前说过,只要有人来看它就会感到困惑(你还必须拿出一个去除潜在结尾的新行或逗号...)

编辑解决方案 - 这是解决方案其实我一起去:

string input = "Austin,Dallas"; 
string format = "<a href='details.aspx?location={0}'>{0}</a>"; 

var formattedList = input.Split(',').Select (i => string.Format(format, i)); 
string result = string.Join(",", formattedList); 
0

这里是另一种方式来做到这一点。正则表达式如此多才多艺。

List<string> inputs = new List<string>() { "AUSTIN,ORL2,ORL6", "CHA,INDY" }; 
List<string> results = new List<string>(); 
foreach (string input in inputs) 
{ 
    List<string> resultComponents = new List<string>(); 
    foreach (Match match in Regex.Matches(input, "([A-Z0-9]+(?=,)?)")) 
    { 
     if (match.Success) resultComponents.Add(string.Format("<a href='details.aspx?location={0}'>{0}</a>", match.Value)); 
    } 
    results.Add(string.Join(", ", resultComponents)); 
} 

请注意,我完全按照您的要求提取您的要求。因此,输出正是你所要求的:

<a href='details.aspx?location=AUSTIN'>AUSTIN</a>, <a href='details.aspx?location=ORL2'>ORL2</a>, <a href='details.aspx?location=ORL6'>ORL6</a> 
<a href='details.aspx?location=CHA'>CHA</a>, <a href='details.aspx?location=INDY'>INDY</a> 
0

这个替换处理的逗号...以及如果他们存在,留下他们。

var data = @"AUSTIN,ORL2,ORL6 
CHA,INDY"; 

Console.WriteLine(Regex.Replace(data, 
           "([^,\r\n]+)(,?)", 
           "<a href='details.aspx?location=$1'>$1</a>$2")); 

/* Output 

<a href='details.aspx?location=AUSTIN'>AUSTIN</a>,<a href='details.aspx?location=ORL2'>ORL2</a>,<a href='details.aspx?location=ORL6'>ORL6</a> 
<a href='details.aspx?location=CHA'>CHA</a>,<a href='details.aspx?location=INDY'>INDY</a> 

*/