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

本文关键字:字符串 何识别 识别 | 更新日期: 2023-09-27 18:28:35

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 的外观不感兴趣,没有任何东西是硬编码的。 将此视为搜索和替换,但使用捕获组

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

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

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

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

如果你有

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

然后您将知道必须更换多少$X。

给出 X 会给你原始字符串中的数字,你可以对源字符串(基于 _(进行拆分,然后只对替换模式进行拆分,直到你找不到更多的替换对象。

我要冒

昧地回答我认为你在问的问题。听起来你在问如何解析分隔字符串。

尝试字符串.拆分

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());