我正在使用正则表达式来解析来自OCR的文档中的数据,并且正在努力匹配1000s逗号分隔符被误读为点,以及点被误读为逗号的情况!
因此,如果真实值为1234567.89,则打印为1,234,567.89,但被误读为:
1.234,567.89
1,234.567.89
1,234,567,89
等等
我可能可以用C#对此进行排序,但是我确信正则表达式可以做到这一点。有没有可以帮助的正则表达式向导?
更新:
我意识到这是一个非常愚蠢的问题,因为正则表达式可以很直接地抓住所有这些问题,这就是我选择解释比赛的方式。它将在C#中。谢谢-很抱歉浪费您的时间!
我将把Dmitry的答案标记为与我正在寻找的答案接近。谢谢。
参考方案
请注意,由于以下原因存在歧义:
123,456 // thousand separator
123.456 // decimal separator
都是可能的(123456
和123.456
)。但是,我们可以检测到一些情况:
小数点分隔符123.456.789
订单123.456,789
错误
错误的数字计数123,45
因此,我们可以建立一个规则:如果分隔符是最后一个,则分隔符可以是小数点后一位,并且不能紧跟三位数字(请参见上面的歧义),所有
其他分隔符应视为千分隔符:
1?234?567?89
^ ^ ^
| | the last one, followed by two digits (not three), thus decimal
| not the last one, thus thousand
not the last one, thus thousand
现在让我们实现一个例程
private static String ClearUp(String value) {
String[] chunks = value.Split(',', '.');
// No separators
if (chunks.Length <= 1)
return value;
// Let's look at the last chunk
// definitely decimal separator (e.g. "123,45")
if (chunks[chunks.Length - 1].Length != 3)
return String.Concat(chunks.Take(chunks.Length - 1)) +
"." +
chunks[chunks.Length - 1];
// may be decimal or thousand
if (value[value.Length - 4] == ',')
return String.Concat(chunks);
else
return String.Concat(chunks.Take(chunks.Length - 1)) +
"." +
chunks[chunks.Length - 1];
}
现在让我们尝试一些测试:
String[] data = new String[] {
// you tests
"1.234,567.89",
"1,234.567.89",
"1,234,567,89",
// my tests
"123,456", // "," should be left intact, i.e. thousand separator
"123.456", // "." should be left intact, i.e. decimal separator
};
String report = String.Join(Environment.NewLine, data
.Select(item => String.Format("{0} -> {1}", item, ClearUp(item))));
Console.Write(report);
结果是
1.234,567.89 -> 1234567.89
1,234.567.89 -> 1234567.89
1,234,567,89 -> 1234567.89
123,456 -> 123456
123.456 -> 123.456
jQuery发布不会将数据发布到ASP.NET API控制器 - javascript我有一次噩梦般的时间通过jquery post将数据发送到ASP.NET Controller。这是JSON.stringify之后的数据:[{"scheduleTaskID":"203","task":"Permit","baselineDate":…
这个json格式正确吗? - c#我尝试解析时有json数据,返回错误的语法错误,请帮助我发现语法错误。[{"isData":"Yes","Details":"[{"Id":"70","Name":"Test","FileName…
.NET C#Webbrowser填充输入,不带ID或类名 - javascript我需要在网络浏览器中填写一个输入,但这不起作用。我认为必须使用name属性来完成,但是怎么做呢?foreach (HtmlElement login in webBrowser1.Document.GetElementsByTagName("input")) { if (login.GetAttribute("name"…
ddl在服务器中未更新-asp.net - javascript我在ASP.NET c#上工作。我有一个DropDownList。 (runat =“ server”)在$ {document).ready上,我更新了它的值:$(document).ready(function () { document.getElementById("ddl").value = "abc"; ……
asp.net mvc中的对象数组数据始终为null - javascript我需要通过json将对象数组发送到asp.net mvc 2,但是我在mvc控制器中没有得到null对象是这样的entries[1].date = "12/22/2014" entries[1].Ref = "0002" entries[1].Credit = "100" entries[2].da…