Соответствующие слова после слова - PullRequest
2 голосов
/ 13 декабря 2011

Мне интересно, можно ли использовать регулярное выражение для сопоставления слова после определенного слова? Например, предположим, что у вас есть такая строка:

test abcde  
dummy test fghij

Можно ли получить массив строк, содержащий слова после теста (abcde и fghij)? Если да, то можете ли вы объяснить?

Ответы [ 5 ]

3 голосов
/ 13 декабря 2011

Вот мое предложение для вас:

(?: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 whitspace. It will stored in a groupd 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);
}
3 голосов
/ 13 декабря 2011

Не используйте RegEx, а просто yourString.Split(' ');.

Тогда вы можете:

var strings = yourString.Split(' ');

var afterTest = strings.Skip(strings.IndexOf("test"))

Это будет быстрее, проще и безопаснее.

Также прочитайте Запись Джеффа Этвуда о регулярных выражениях

2 голосов
/ 13 декабря 2011

Вы можете использовать положительный взгляд с рисунком (?<=test).+.

var matches = Regex.Matches("test abcd\ndummy test fghij", @"(?<=test).+");
1 голос
/ 13 декабря 2011
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]);
0 голосов
/ 13 декабря 2011

Может быть, этот ответ может помочь

Если вы хотите захватить весь контент из пробела перед первым словом в пробел после слова , используйте:

(?:\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
with text and
Text is
my text.
a text-field example
dummy la@text.be to
...