我有几千行文字来获取特定的测量结果。这些行总是采用相同的格式:
'0980 - 14'3 - Plough Yard - London EC2A 3'
'0981 - 14'3 - Waterson St - London E2 8'
'0982 - 14'3 - Union Walk - London E2 8'
'0983 - 14'3 - Union Walk - London E2 8'
'0984 - 14'3 - Hare Row - London E2 9'
'0985 - 14'3 - Sharratt St - London SE15 1'
'0986 - 14'3 - Rolt St - London SE8 5'
'0987 - 14'3 - Edward St - London SE8 5'
因为我对正则表达式的了解很差,所以我唯一想到的就是:
\-(.*?)\-
哪些(那些对这些随机字符串有更大意识的人,可以看到)也将在另一方面匹配。我需要的只是14'3
部分。我无法理解最左边的数字也会变得多大,可能会达到数十万。
更新 显然我的模式字符串确实可以工作。我用来构建和测试它的网站是错误的。非常感谢你的帮助!
答案 0 :(得分:1)
答案 1 :(得分:1)
答案 2 :(得分:1)
怎么样:
- (\d+'\d+) -
这将匹配每个14'3
答案 3 :(得分:1)
你也可以试试这个正则表达式,
^'[0-9]+\s*-\s*([^ ]*)
<强>解释强>
'0980 - 14'3 - Plough Yard - London EC2A 3'
_| | | |
^'[0-9]+| | |
_ _ _ _| | |_____
\s*-\s* | ([^ ]*)
_ _ _ _ |_________
答案 4 :(得分:1)
我想指出你的模式在.NET正则表达式引擎中工作,没有任何其他选项。这是一个演示(我删除了不必要的反斜杠):
var input = @"'0980 - 14'3 - Plough Yard - London EC2A 3'
'0981 - 14'3 - Waterson St - London E2 8'
'0982 - 14'3 - Union Walk - London E2 8'
'0983 - 14'3 - Union Walk - London E2 8'
'0984 - 14'3 - Hare Row - London E2 9'
'0985 - 14'3 - Sharratt St - London SE15 1'
'0986 - 14'3 - Rolt St - London SE8 5'
'0987 - 14'3 - Edward St - London SE8 5'";
foreach(Match m in Regex.Matches(input, "-(.*?)-"))
{
Console.WriteLine(m.Groups[1].Value);
}
这是因为.
匹配除换行符之外的任何字符(除非您使用'Single-line' mode使其也匹配换行符)。只要字符串中没有一行在-
之后有另一个London …
,它就只匹配第一对-
之间的子字符串。
但是,对于像这样相对简单的事情,您可以改为使用Split
:
foreach(var line in input.Split('\n'))
{
Console.WriteLine(line.Split(new[] { '-' }, 3)[1]);
}