Извлечение одного слова на основе специального символа с использованием регулярного выражения в C # - PullRequest
0 голосов
/ 20 апреля 2010

Я не очень хорош в регулярных выражениях, но хочу сделать что-то вроде этого:

string = "c test123 d split"

Я хочу разбить слово на основе "c" и "d". это может быть любое слово, которое у меня уже есть. Строка будет предоставлена ​​пользователем. я хочу "test123" и "split" в качестве выходных данных. и может быть любое количество слов, т. е. «c test123 d split e new» и т. д. c c, я уже со мной. Я хочу просто следующее слово после этого слова, т.е. после c у меня test123 и после d я разделился, а после e у меня появилось новое, поэтому мне нужно test123 и split и new. как я могу это сделать??? И еще одна вещь Я передам только c первым, чем d и чем e. не все вместе. Я пытался

string strSearchWord = "c";
Regex testRegex1 = новый Regex (strSearchWord); List lstValues ​​= testRegex1.Split ("c test123 d Раскол ") ToList ();.

Но он работает только для последнего символа, т. Е. Для d он дает последнее слово, а для c он включает test123 d split.

Как мне это сделать ???

Ввод может быть

string strSearchWord = "c mytest1 d newtest1 e lasttest1"; разделение должно основываться на символах "c d и e". Я передам их один за другим.

или

string strSearchword = "q 100 p 200 t 2000"; разделение должно основываться на символах "q p и t". Я передам их один за другим.

или string strSearchWord = "t 100 r pass"; разделение должно основываться на символах "t r". Я передам их один за другим.

или

string strSeaRCHwORD = "fi 100 se 2000 td 500 ft 200 fv 6000 lt благодаря"; разделение должно основываться на символах "fi, se, td, ft, fv и lt". Я передам их один за другим.

Надеюсь, это понятно. Любая другая спецификация ????

Ответы [ 2 ]

1 голос
/ 20 апреля 2010
string[] splitArray = null;
splitArray = Regex.Split(subjectString, @"\s*\b(c|d)\b\s*");

будет разбивать строку по «словам» c или d, независимо от того, окружены они пробелами или нет, но только если они встречаются как целые слова (следовательно, \b якоря границы слова).

Это дает вам все подстроки между вашими словами в виде массива.

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

string resultString = null;
resultString = Regex.Match(subjectString, @"(?<=\bc\b\s*)\w+").Value;

найдет слово после c. Сделайте то же самое для d ((?<=\bd\b\s*)\w+) и т. Д.

Это регулярное выражение означает:

(?<=\bc\b\s*): Утверждение о том, что можно сопоставить «полное слово» c, за которым могут следовать пробелы, слева от текущей позиции в строке (положительный взгляд за спиной).

\w+: Затем сопоставьте любые последующие буквенно-цифровые символы (включая _).

0 голосов
/ 20 апреля 2010

использовать регулярные выражения .

регулярное выражение будет

"c(.+?)d(.+?)"

и вы получите его как

Regex r = new Regex("c\s(.+?)\sd\s(.+?)"); // \s is whitespace
r.Match("c test123 d split").Groups[1] //is the 1st group "test123"
r.Match("c test123 d split").Groups[2] //is the 2nd group "split"
r.Match("c test123 d split").Groups[0] //is the whole match "c test123 d split
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...