使用C#识别字符串中的数值并转换为中性字符串

时间:2016-10-21 06:40:00

标签: c# regex

给出以下输入文本:

  

John出生于 1965年,他在 10/22/89 上加入了他的第一份工作,   他的第一份工资 $ 2500 。今天他每月赚 10,000美元。他   在 08/2013

上创办了自己的公司

C#函数应识别所有数字(对于已知模式)并将这些单词转换(替换)为我们发音的单词。

使用上面的示例

  • 1965:1965年
  • 10/22/89:十月二十二号一九八九年
  • $ 2500:两千
  • 10,000美元:数万
  • 08/2013:8月26日

可能有更多这样的组合,如

  • 2015年9月2日
  • $ 2500
  • $ 2500
  • $ 2,500

在这里进行一些研究是一些数字选项:

使用Humanizer的单词数量,可以使用ToWords扩展名将数字更改为单词:

  • 1.ToWords()=> “一”
  • 10.ToWords()=> “十”
  • 11.ToWords()=> “11”
  • 122.ToWords()=> “一百二十二”
  • 3501.ToWords()=> “三千五百零一”

此外,Adam Robinson以及Number to String

的好解决方案

无法找到将日期转换为发音字符串的更好/现有解决方案。

让谁对识别号码感到困惑日期,我将使用正则表达式来识别那些,我的问题是将确定的日期,数字转换为人发音词

这里的方法是

  • 步骤1)使用正则表达式查找所有货币和数字
  • 步骤2)使用Humanizer将数字/货币转换为单词
  • 步骤3)使用正则表达式查找所有日期
  • 步骤4)编写一个函数或找一个插件,可以将任何日期格式转换为人发音词

此时,我陷入了第4步。

3 个答案:

答案 0 :(得分:1)

看看Humanizer。除其他外,它可以将日期和值转换为相应的单词。

答案 1 :(得分:0)

List<String> numericValues = new List<String>();
String tempValue = String.Empty;

for(int i =0; i < sourceString.length;i++)
{
   if(Char.IsDigit(sourcestring[i]) || sourcestring[i] == '/' || sourcestring[i] == '$')//Etc.. special characters
   {
     tempValue = tempValue  + sourcestring[i]
   }
   else
   {
      if(tempValue != String.Empty)
      {
         numericValues.Add(tempValue);
         tempValue = String.Empty
      }
   }
}

这不包括像“10,000美元”这样的情况并且不处理空格但它应该给你一个起点。

答案 2 :(得分:0)

使用Humanizer的单词数量,可以使用ToWords扩展名将数字更改为单词:

  • 1.ToWords()=&gt; “一”
  • 10.ToWords()=&gt; “十”
  • 11.ToWords()=&gt; “11”
  • 122.ToWords()=&gt; “一百二十二”
  • 3501.ToWords()=&gt; “三千五百零一”

代码example

此外,Adam Robinson以及Number to String

的好解决方案

无法为发音字符串的日期找到更好/现有的解决方案。