Регулярное выражение, числа? - PullRequest
0 голосов
/ 07 декабря 2008

Я создал код, который переводит строки, чтобы сопоставить каждое слово из массива 0ne с массивом два, и оно показывает правильные результаты. Но как позволить компилятору взять число в строке и распечатать его как есть, мммм, посмотрите код, который я написал


class Program
    {
        public static string[] E = { "i", "go", "school", "to", "at" };
        public static string[] A = { "Je", "vais", "ecole", "a", "a" };

        public static string Translate(string s)
        {
            string str = "";
            Regex Expression = new Regex(@"[a-zA-Z]+");
            MatchCollection M = Expression.Matches(s);
            foreach (Match x in M)
                str = str + " " + TranslateWord(x.ToString());
            return str;
        }

public static string TranslateWord(string s)
        {
            for (int i = 0; i < E.Length; i++)
                if (s.ToLower() == E[i].ToLower())
                    return A[i];
            return "Undefined";
        }

здесь я хочу ввести всю строку и код должен перевести ее с номером, теперь я знаю, как сделать слово (разделив их и перевести), но как насчет чисел)

        static void Main(string[] args)
        {
            string str = "I go to school at 8";
            Console.WriteLine(Translate(str));
        }

как продолжить?!

Ответы [ 4 ]

4 голосов
/ 07 декабря 2008

Измените свое регулярное выражение на [a-zA-Z0-9]+

Кстати, почему бы вам не использовать метод String.Split вместо Regex?

1 голос
/ 08 декабря 2008

Это регулярное выражение будет работать лучше, когда вы начнете набирать акценты на своих французских словах и хотите разбить французскую строку:

\w+

В .NET, \ w включает все буквы и цифры из всех скриптов, а не только английский a-z и 0-9.

0 голосов
/ 08 декабря 2008

Если ваш движок регулярных выражений поддерживает его, я использую [: alnum:] (т.е. классы POSIX), что делает его более переносимым регулярным выражением. Как обычно, остерегайтесь местных проблем.

0 голосов
/ 07 декабря 2008

Вот подсказка:

public static void process (String s) {
    String [] tokens = s.split("\\s+");
    for (String token : tokens) {
        if (token.matches("[A-Za-z]+")) {
            System.out.println("  word: '" + token + "'");
        } else if (token.matches("[0-9]+")) {
            System.out.println("number: '" + token + "'");
        } else {
            System.out.println(" mixed: '" + token + "'");
        }
    }
}

Wnen вызывается, например, с помощью ...

process("My 23 dogs have 496 fleas.");

... выдает следующее:

  word: 'My'
number: '23'
  word: 'dogs'
  word: 'have'
number: '496'
 mixed: 'fleas.'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...