如何识别字符串中的捕获组

时间:2013-08-21 18:13:56

标签: c#

dst = "$3$1$2_BAR.xml";

如何轻松识别字符串中的捕获组?所以对于上面我想确定我正在寻找3个捕获组,然后我将从另一个字符串中拉出并相应地插入此处。所以扫描字符串我应该寻找'$'后跟一个数字?有什么问题吗?有谁看到更好的方法?

我要做的是自动重命名文件的过程。 dst告诉我新文件必须是什么样的,这些捕获组来自一个当前命名的源文件

src = 08_21_2013_foo.xml

代表。根据文件模式捕获捕获组

src_pattern = "(\d\d)_(\d\d)_(\d\d\d\d)_FOO.xml";

所以我需要拉出第3组,即'2013',然后是第1组,即'08,然后第2组是'21',所以在完成时看起来像20130821_BAR.xml

使用单个文件并将所有这些内容提供给用户并不难,但dst和src_pattern正从sql server中提取出来,并且用户不知道它们的样子,它可能是

$3_insert_$1_randomly_$2_in_$5_here_$4.xml举个例子。

所以基本上我需要一种方法来扫描dst字符串,看到$ 3并进入src并拉出第三组并替换它,然后看到$ 2并进入src并拉出它并替换它等等。我不知道我是否解释得很好。

不要将它限制在它需要适用于任何dst的这个特定示例中,我对dst看起来不感兴趣,没有任何硬编码。将此视为搜索和替换,但使用捕获组

3 个答案:

答案 0 :(得分:1)

您可以轻松使用String.Format构建字符串。以下示例应该为您提供提示

string one ="first";
string two = " second";
string three = "third";

string result = String.Format("{0}{1}{2}_BAR.xml",three,one,two);

答案 1 :(得分:0)

我要站出来回答我认为你问的问题。听起来你问的是如何解析分隔的字符串。

尝试string.split

string[] values = dst.split('$')

修改

所以既然你已经更新了你的问题,我想我更接近理解你的问题,但它仍然有点模糊。现在听起来你正试图用某种方式从另一个字符串中提取的值替换一些占位符值$n。你有办法从src_patter拉出组吗?

这是我会做的,虽然可能有更有效的方法。

string[] group = new string[] { "08", "21", "2013" }; /* group from src_pattern */
StringBuilder sb = new StringBuilder("$3$1$2_BAR.xml");
for (int i = 1; i <= group.Length; i++)
{
    sb.Replace("$" + i.ToString(), group[i - 1]);
}
Console.WriteLine(sb.ToString());

答案 2 :(得分:0)

我认为你需要把事情分开,然后做一个替换......

如果你有

$3_insert_$1_randomly_$2_in_$5_here_$4.xml

然后你会知道要替换多少$ X.

给予X将为您提供原始字符串中的数字,您可以在源字符串上执行拆分(基于_),然后只替换替换模式,直到找不到任何更换对象为止..