VS2008 C #: регулярное выражение и определение определенных слов - PullRequest
0 голосов
/ 17 декабря 2009

Я хотел бы использовать регулярное выражение для идентификации определенных слов в строке.

Например:

"bla bla bla |   First Name = John Doe | City = Denver | bla bla bla | State = CA | bla bla bla"

В приведенной выше строке, которая является | Разграничить слова, я хочу разобрать содержимое имени, города и штата и сохранить их где-нибудь, как в хеш-таблице.

Как мне это сделать? Я думаю, что лучший способ будет использовать регулярные выражения.

Ответы [ 5 ]

4 голосов
/ 17 декабря 2009

Не проще ли использовать сплит?

Пример:

var test = "bla bla bla | First Name = John Doe | City = Denver | bla bla bla | State = CA | bla bla bla";
var sections = test.Split('|');
var firstName = sections[1].Split('=')[1].Trim();
var city= sections[2].Split('=')[1].Trim();
var state= sections[4].Split('=')[1].Trim();
1 голос
/ 17 декабря 2009

Использовать именованные группы очень просто ...

    // named groups are very cool for this...
    public static Regex regex = new Regex("\\|(?:\\s*)(?<key>(\\w+)(\\s*))=(?<value>[^|]+)", RegexOptions.CultureInvariant | RegexOptions.Compiled);

    public static Dictionary<string, string> Extract(string line)
    {
        Dictionary<string, string> results = new Dictionary<string, string>();          
        foreach (Match match in regex.Matches(line))
        {
            var groupKey = match.Groups["key"];
            var groupValue = match.Groups["value"];
            if (groupKey.Success && groupValue.Success)
            {
                // add the group value trimmed as we might have extra blank spaces
                results[groupKey.Value.Trim()] = groupValue.Value.Trim();
            }
        }
        return results;
    }
1 голос
/ 17 декабря 2009

Используйте функцию Split():

public class SplitTest {
    public static void Main() {

        string words = "This is a list of words, with: a bit of punctuation" +
                       "\tand a tab character.";

        string [] split = words.Split(new Char [] {' ', ',', '.', ':', '\t' });

        foreach (string s in split) {

            if (s.Trim() != "")
                Console.WriteLine(s);
        }
    }
}
// The example displays the following output to the console:
//       This
//       is
//       a
//       list
//       of
//       words
//       with
//       a
//       bit
//       of
//       punctuation
//       and
//       a
//       tab
//       character
0 голосов
/ 17 декабря 2009

Если ваши данные непротиворечивы (то есть всегда используют | и = в качестве разделителей), вы можете использовать метод разделения строк, чтобы получить результаты в массиве.

0 голосов
/ 17 декабря 2009

Я бы использовал string.Split ('|') и string.IndexOf ("=") для разбора элементов. Это, безусловно, было бы проще, чем регулярное выражение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...