【问题标题】:Regular Expression, numbers?正则表达式,数字?
【发布时间】:2008-12-07 10:46:55
【问题描述】:

我编写了一个代码来翻译字符串以匹配从数组 0ne 到数组 2 的每个单词,并显示正确的结果。但是如何让编译器把字符串中的数字按原样打印出来,嗯嗯看我写的代码


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));
        }

如何继续?!

【问题讨论】:

    标签: c# regex


    【解决方案1】:

    将您的正则表达式更改为[a-zA-Z0-9]+

    对了,你为什么不使用String.Split方法来代替Regex呢?

    【讨论】:

    • 好吧,我想通过拆分越来越简单地练习正则表达式
    • 你不能通过虚构情况来真正练习正则表达式。正则表达式只有在您有未知输入时才真正有用。
    • Gareth,总的来说你是对的,但是逐步学习是好的。至少它能让你擅长使用 Regex 库方法。
    【解决方案2】:

    当您真正开始在法语单词上输入重音符号并且想要拆分法语字符串时,此正则表达式会更好地工作:

    \w+
    

    在 .NET 中,\w 包括来自所有脚本的所有字母和数字,而不仅仅是英文 a-z 和 0-9。

    【讨论】:

      【解决方案3】:

      这里有一个提示:

      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.'
      

      【讨论】:

      • Java(准确地说是 Java 5)。
      【解决方案4】:

      如果您的正则表达式引擎支持它,我会使用 [:alnum:](即 POSIX 类),以实现更便携的正则表达式。像往常一样,请注意语言环境问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-23
        • 1970-01-01
        • 2011-09-16
        • 2014-05-24
        • 1970-01-01
        相关资源
        最近更新 更多