C# Reg-Ex验证和文本提取

C# Reg-Ex验证和文本提取,c#,regex,C#,Regex,我正在玩一个短信服务,它允许客户发短信给我们,他们发送的部分短信将包含国家保险号码、价值和日期 所以我需要尽可能聪明地处理格式 例如,如果有人发短信(格式) “QQ123456A 500 4/10月” 或 “QQ123456A 500.00 10月24日” 或 “2014年10月24日QQ123456A 500.00” 或 “QQ123456A 500.00 2014年10月24日” 或 “QQ123456A 500.00 2014年10月24日” 或 “QQ123456A 500.00 201

我正在玩一个短信服务,它允许客户发短信给我们,他们发送的部分短信将包含国家保险号码、价值和日期

所以我需要尽可能聪明地处理格式

例如,如果有人发短信(格式)

“QQ123456A 500 4/10月” 或

“QQ123456A 500.00 10月24日” 或

“2014年10月24日QQ123456A 500.00” 或

“QQ123456A 500.00 2014年10月24日” 或

“QQ123456A 500.00 2014年10月24日” 或

“QQ123456A 500.00 2014年10月24日”

如何尽可能多地提取并验证格式,示例将非常有用。

伪代码

按空间分割

NI数
^\s*([a-zA-Z]){2}\s*([0-9]){1}\s*([0-9]){1}\s*([0-9]){1}\s*([0-9]){1}\s*([0-9]){1}\s*([0-9]){1}\s*([a-zA-Z]){1}$
(未测试)

数字-我假设这是一笔付款,所以它实际上只能是一个数字,一个小数点或一个逗号(5000.00)可能以一个符号开头-所以这很容易测试

日期-没有快速的解决方法-我可能会做一些测试-它是否包含-或/

包括十月、十一月等吗

根据通过的测试-相应地解析日期

您只需检查您是否已匹配NI编号和成本-如果已匹配,则可以在剩余值上直接使用
.format()
。(或者不管什么-从使用C#以来已经有多少年了-只是格式化到目前为止-如果它没有解析,那么返回
false

然后运行一个检查,确保没有零件返回false


这应该相当可靠。

您试过什么吗?听起来您需要用空格分隔字符串,这将分别给出保险号、价值和日期。然后只需要解析一个日期,不需要正则表达式。