Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用C#识别字符串中的数值并转换为pronousing字符串_C#_Regex - Fatal编程技术网

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

使用C#识别字符串中的数值并转换为pronousing字符串,c#,regex,C#,Regex,给定以下输入文本: 约翰出生于1965年,他于1989年10月22日加入了他的第一份工作, 他的第一份薪水是2500美元。今天他每月挣10000美元。他 他于2013年8月8日创办了自己的公司 C#函数应该识别所有数字词(对于已知模式),并将这些数字词转换(替换)为我们发音的单词 使用上述示例 1965年:1965年 1989年10月22日:1989年10月22日 2500元:2000元 10000美元:万美元 2013年8月8日:2013年8月23日 可能会有更多类似的组合 2015-0

给定以下输入文本:

约翰出生于1965年,他于1989年10月22日加入了他的第一份工作, 他的第一份薪水是2500美元。今天他每月挣10000美元。他 他于2013年8月8日创办了自己的公司

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

使用上述示例

  • 1965年:1965年
  • 1989年10月22日:1989年10月22日
  • 2500元:2000元
  • 10000美元:万美元
  • 2013年8月8日:2013年8月23日
可能会有更多类似的组合

  • 2015-09-02
  • 2500美元
  • 2500美元
  • 2500美元
通过一些研究,这里有一些数字选项:

使用数字转换为单词,它可以使用
ToWords
扩展名将数字转换为单词:

  • 1.ToWords()=>“一个”
  • 10.ToWords()=>“十”
  • 11.ToWords()=>“十一”
  • 122.ToWords()=>“一百二十二”
  • 3501.ToWords()=>“三千五百零一”
另外,从数字到字符串的解决方案也不错

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

对于那些对识别数字和日期感到困惑的人,我将使用正则表达式来识别它们,我的问题是将识别的日期、数字转换为人类发音的单词


这里的方法是

  • 步骤1)使用正则表达式查找所有货币和数字
  • 步骤2)使用将数字/货币转换为文字
  • 步骤3)使用正则表达式查找所有日期
  • 第4步)编写一个函数或找到一个插件,可以将任何日期格式转换为人类发音的单词
在这一点上,我被第4步卡住了。

看一看。它可以将日期和值转换为相应的单词

List numericValues=new List();
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
      }
   }
}
String tempValue=String.Empty; for(int i=0;i
这不包括“USD 10000”之类的情况,也不处理空格,但它应该为您提供一个起点。

使用数字转换为单词,它可以使用扩展名将数字转换为单词:

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

另外,从数字到字符串的解决方案也不错


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

可能重复。@WiktorStribiżew感谢您介绍了货币转换,还需要提供类似的日期代码。您应该了解,检测所有可能的日期-时间格式并不是一个简单的正则表达式。现在,你的问题太广泛了,无法回答。我现在唯一能建议的是,您需要使用一些实体检测器来解析文本,获得数字、货币、日期,然后用专用算法解析每一个。@WiktorStribiżew目前,我几乎没有已知的格式可以识别,日期、货币和常规数字,我的挑战是不识别数字类型,我可以用一些正则表达式来实现这一点,我的挑战是将日期转换为人类发音字符串,例如,1983年10月应该是1983年10月这是不可能的,除非你能找到一种方法来确定1965年是否是一年(“1965年”)。我只是在看它。Humanizer对数字有好处,但对日期没有好处