c# - c# 地址的正则表达式
问题描述
我有一个来自 csv 文件的字符串。我试图从引号之间的值中删除逗号,但前提是它不是数字。
例如,我有这个字符串。
6/4/2020,11111,John,Doe,"111 st , city,State",city,st,11111,email@gmail.com,11111111111,11111111111,"$370,000.00","$500,000.00 ",blah blah blah,"$370,000.00 ",4.25%,stable,74.00%,Rate and Term,0.00%,$0.00 ,Good,No
上面的st地址是
"111 st , city,State"
我可以用这个正则表达式删除引号之间的逗号
var regex = new Regex("\\\"(.*?)\\\"");
但是,这也删除了数字中的逗号
"$370,000.00"
如何删除地址中的逗号,但忽略带有美元符号 $ 的数字字段?
这是一个示例代码
var test = $"6/4/2020,test,test,testJR,\"111 test DRIVE, city, st\",city,st,11111,test@gmail.com,11111,11111,\"$370,000.00 \",\"$500,000.00 \",Single Family Residence,\"$370,000.00 \",4.25%,Fixed,74.00%,Rate and Term,0.00%,$0.00 ,Good,No";
var regex = new Regex("\\\"(.*?)\\\"");
test = regex.Replace(test, m => m.Value.Replace(',', ' '));
解决方案
您可以使用
var regex = new Regex(@"""\s*\$\d+(?:,\d+)*(?:\.\d+)?\s*""|(""[^""]*"")");
test = regex.Replace(test, m => m.Groups[1].Success ?
m.Groups[1].Value.Replace(',', ' ') : m.Value);
查看C# 演示
细节
"\s*\$\d+(?:,\d+)*(?:\.\d+)?\s*"
:"\s*\$
-"
,然后是 0+ 个空格,然后是$
char\d+(?:,\d+)*(?:\.\d+)?
- 1+ 位,然后是 0 次或多次逗号,然后是 1+ 位,然后是可选的 a.
和 1+ 位\s*"
- 0+ 个空格,然后"
|
- 或者("[^"]*")
- 捕获第 1 组: ,除然后"
之外的零个或多个字符。"
"
这m => m.Groups[1].Success ? m.Groups[1].Value.Replace(',', ' ') : m.Value)
意味着仅当捕获组 1 匹配时,逗号才会替换为空格,否则,匹配项将按原样返回。
推荐阅读
- c# - 从部分视图编辑器获取更新的数据并传递给控制器
- elasticsearch - ElasticSearch 搜索有时无法搜索文档
- c# - 如何在 Forge API 中向元素添加参数
- javascript - jQuery可拖动功能导致PrimeFaces JSF页面出错
- html - CSS:为什么颜色代码 #999 的颜色在 Chrome 和 Firefox 中不同?
- azure - “Add-AzureAccount”出现错误:服务返回的请求与请求中的用户“XXX”不匹配
- sql - 删除正则表达式匹配后获取剩余内容
- javascript - 在 promise 调用中设置请求标头时,标头未设置为服务器
- javascript - 在angularjs中带有表格数据的引导轮播
- javascript - [Vue 警告]:缺少必需的道具