C#正则表达式提取两个字符之间的字符串,但第一个字符出现多次

时间:2019-06-03 10:14:33

标签: c# regex

我正在尝试提取两个字符之间的字符串。第一个角色有多次出现,我需要第一个字符的最后一次出现。我已经检查过类似的问题,但是如果多次出现第一个字符,所有建议的正则表达式将无法正常工作。

示例:

    form: FormGroup;

    attachmentAr = [{ name: "A" }, { name: "B" }, { name: "C" }]

    constructor(private fb: FormBuilder) {
      this.form = this.fb.group({
        items: this.fb.array([]),
        remark: [""]
      });
    }

    ngOnInit() {
      this.addCreds()
    }

    addCreds() {
      const formArray = this.form.controls.items as FormArray;
      formArray.push(this.fb.group({
        attachment: '',
        username: '',
        password: '',
      }));
    }

    submit() {
      console.log(' all rows : ', this.form.value);
    }

我的代码:

TEST-[1111]-20190603-25_TEST17083

当前结果:

string input = "TEST-[1111]-20190603-25_TEST17083";
var matches = Regex.Matches(input,@"(?<=-)(.+?)(?=_)");
var match = matches.OfType<Match>().FirstOrDefault();
var value = match.Groups[0].Value;

预期结果:

[1111]-20190603-25

2 个答案:

答案 0 :(得分:4)

让我们尝试一些不同的模式:

(?<=-)([^-_]+?)(?=_)

我们使用[^-_]代替.:除 -_

以外的所有字符

答案 1 :(得分:2)

获得结果的一种选择(当然,还有很多选择)是以下模式:

.*-([0-9]*)_

然后获得第一个匹配的组(ID为1的组)。

因此您的代码将如下所示:

var input = "[1111]-20190603-25";
var pattern = @".*-([0-9]*)_";

var match = Regex.Match(input, pattern);
var value = match.Groups[1];