-1
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";

所以我需要拉第三组,即“2013”​​,然后是第一组,即“08”,然后是第二组,即“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 的外观不感兴趣,没有什么是硬编码的。将此视为搜索和替换,但要捕获组

4

3 回答 3

1

您可以轻松地使用 String.Format 来构造您的字符串。下面的例子应该给你一个提示

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

string result = String.Format("{0}{1}{2}_BAR.xml",three,one,two);
于 2013-08-21T18:19:42.057 回答
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());
于 2013-08-21T18:19:00.443 回答
0

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

如果你有

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

然后你就会知道你需要替换多少$X。

给出 X 将为您提供原始字符串中的数字,您可以对源字符串进行拆分(基于 _),然后仅用于替换模式,直到找不到更多替换对象。

于 2013-08-21T18:33:53.387 回答