使用C#识别字符串中的数值并转换为pronousing字符串
给定以下输入文本: 约翰出生于1965年,他于1989年10月22日加入了他的第一份工作, 他的第一份薪水是2500美元。今天他每月挣10000美元。他 他于2013年8月8日创办了自己的公司 C#函数应该识别所有数字词(对于已知模式),并将这些数字词转换(替换)为我们发音的单词 使用上述示例使用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年: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步)编写一个函数或找到一个插件,可以将任何日期格式转换为人类发音的单词
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对数字有好处,但对日期没有好处