匹配单词后的单词

本文关键字:单词 | 更新日期: 2023-09-27 18:17:46

我想知道,是否有可能使用regex匹配特定单词后的单词?例如,假设您有一个这样的字符串:

test abcde  
dummy test fghij

是否有可能获得一个字符串数组,其中包含测试后的单词(abcde和fghij)?如果有,你能解释一下吗?

匹配单词后的单词

我的建议是:

(?:test's)(?<word>'b'S+'b)

(?:test's)       matches "test" with a trailing blank, but does not include it in the capture
(?<word>'b'S+'b) matches a word with any character except a whitespace. It will be stored in a group called "word".

下面是如何使用它的一个小例子:

var regex = new Regex(@"(?:test's)(?<word>'b'S+'b)");
var matchCollection = regex.Matches("test abcde   dummy test fghij ");
foreach (Match match in matchCollection)
{
    Debug.WriteLine(match.Groups["word"].Value);
}

不使用RegEx,使用简单的yourString.Split(' ');

然后,你可以:

var strings = yourString.Split(' ');
var afterTest = strings.Skip(strings.IndexOf("test"))

它将更快,更简单,更安全。

也可以阅读Jeff Atwood关于regex的文章

您可以使用模式(?<=test).+的正面向后看。

var matches = Regex.Matches("test abcd'ndummy test fghij", @"(?<=test).+");
ArrayList aWrods = new ArrayList();
string[] sArr = yourString.Split(' ');
for (int i=0; i<sArr.Count()-1; i++)
    if (sArr[i] == "test")
        aWords.Add(sArr[i+1]);

也许这个答案对你有帮助

如果你想抓取从第一个单词之前的空格到单词之后的空格的所有内容,使用:

(?:'S+'s)?'S*text'S*(?:'s'S+)?

简单的测试:

string input = @"
    This is some dummy text to find a word in a string full with text and words
    Text is too read
    Read my text.
    This is a text-field example
    this is some dummy la@text.be to read";
var matches = Regex.Matches(
    input,
    @"(?:'S+'s)?'S*text'S*(?:'s'S+)?",
    RegexOptions.IgnoreCase
);

匹配项为:

dummy text to有文本和文本是我的文本。文本字段示例Dummy la@text.be to