提问人:Nick Ulrich 提问时间:9/16/2022 最后编辑:EnigmativityNick Ulrich 更新时间:9/16/2022 访问量:56
查找一系列行的 C# 正则表达式模式匹配 [已关闭]
Looking for a C# Regex pattern matching for a series of lines [closed]
问:
我看到一个数据文件,在文件中我有一行需要匹配,然后我会阅读接下来的几行,直到我再次找到这个匹配项。
以下是我需要匹配的线的各种结构:
69 1.0 PKS-EKC-FlYCTRK--Y 2,110.28 2,110.28
70 2.0 ACS-PMM 31.75 63.50
72 1.0 PKS-TR1-CRD 308.14 308.14
73 1.0 QTC-01HZZ-RBER058- 1,725.57 1,725.57
74 1.0 MGS-05B-4TC-120--8 1,222.84 1,222.84
75 1.0 ACS-VGY 98.60 98.60
76 2.0 ACS-VGG 27.27 54.53
77 2.0 ACS-VGQ 110.93 221.86
78 2.0 ECS-ENM--845 1,294.18 2,588.36
80 1.0 FREIGHT 4,188.00 4,188.00
这是我到目前为止想到的,但它只匹配一行,我需要匹配所有行。
(\d{2})\s(\d{1}.\d{1})\s(\w+?-\w+?-\w+?--\w)\s(\d+?,\d+.\d+)\s(\d+?,\d+.\d+)
答:
1赞
tymtam
9/16/2022
#1
您可以像这样检查这些行:
bool IsThisIt(string line)
{
var parts = line.Split(' ');
if(parts.Length != 5) return false;
// Number
if(!int.TryParse(parts[0], out var _)) return false;
// Type
if(!decimal.TryParse(parts[1], out var _)) return false;
// Price 1
if(!decimal.TryParse(parts[3], out var _)) return false;
// Price 2
if(!decimal.TryParse(parts[4], out var _)) return false;
return true;
}
0赞
M.Sqrl
9/16/2022
#2
我喜欢一个好的正则表达式问题。解决!
^(\d{2})\s(\d\.\d)\s(\S*)\s((\d*\,\d*.\d{2})|(\d*.\d{2}))\s((\d*\,\d*.\d{2})|(\d*.\d{2}))$
开头总是有两位数字:
^(\d{2})
后跟一位小数的数字:
(\d\.\d)
后跟一些非空格字符字符串:
(\S*)
使用 OR 处理不同的数值结构:
((\d*\,\d*.\d{2})|(\d*.\d{2}))
regex101.com 是你的朋友。
评论
0赞
Nick Ulrich
9/17/2022
谢谢大家。这些答案很棒!
评论
^(\S+)\s(\S+)\s(\S+)\s(\S+)\s(\S+)$
{1}
总是多余的,不会做你似乎认为它做的事情。+?
^(\d{2})\s(\d.\d)\s(\w+(?:-+\w+)*(?:--\w)?-?)\s((?:\d+,)?\d+.\d+)\s((?:\d+,)?\d+.\d+)$
s(\b[\d.,]+)$ -
许多解决方案,都取决于匹配精度:)