【问题标题】:C# Regex, extract strings by reference stringC#正则表达式,通过引用字符串提取字符串
【发布时间】:2013-11-08 12:26:28
【问题描述】:

编辑:@Heinzi 的解决方案 https://stackoverflow.com/a/1731641/87698


我有两个字符串,例如someText-test-stringSomeMoreText? 和某种模式字符串,例如{0}test-string{1}?

我正在尝试从第一个字符串中提取与第二个字符串中占位符位置匹配的子字符串。

生成的子字符串应该是:someText-SomeMoreText

我尝试使用Regex.Split("someText-test-stringSomeMoreText?", "[.]*test-string[.]*\?" 提取。但是这不起作用。

我希望有人有另一个想法......

【问题讨论】:

标签: c# regex extract


【解决方案1】:

您可以选择使用命名组:

(?<prefix>.*)test-string(?<suffix>.*)\?

这将返回 2 个包含所需前缀和后缀的组。

var match = Regex.Match("someText-test-stringSomeMoreText?", 
    @"(?<prefix>.*)test-string(?<suffix>.*)\?");
Console.WriteLine(match.Groups["prefix"]);
Console.WriteLine(match.Groups["suffix"]);

【讨论】:

  • 问题是,这两个输入字符串是完全可变的。例如,第二个字符串也可能看起来像 {0}test{1}stringSome{2}Text?。问题是,我正在寻找一种方法来动态地从这个伪模式字符串创建一个有效的正则表达式模式。
【解决方案2】:

我有一个解决方案,至少它有点动态。

首先我将模式字符串{0}test-string{1}?string[] patternElements = Regex.Split(inputPattern, @"(\\\{[a-zA-Z0-9]*\})");

然后我吐出输入字符串someText-test-stringSomeMoreText? string[] inputElements = inputString.Split(patternElements, StringSplitOptions.RemoveEmptyEntries);

现在inputElements 是与占位符{0},{1},... 对应的文本片段

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-25
    • 2016-12-11
    • 2014-10-17
    • 2011-12-05
    • 1970-01-01
    • 2013-05-20
    • 1970-01-01
    相关资源
    最近更新 更多