我有以下字符串:
city-Rio de Janeiro + Sao Paulo + Belo Horizonte
我正在使用以下正则表达式尝试捕获城市名称:
(?<=city\-|\+)(?<city>[a-zA-Z\s+\-]+)(?=\+|$)
不幸的是,上面的正则表达式正在回归一个大集团,如下:
里约热内卢+圣保罗+贝洛奥里藏特
如果我更改源字符串和正则表达式中的分隔符,一切正常,但我想使用加号作为分隔符,我该怎么做?
答案 0 :(得分:2)
匹配那么多,因为字符类中的+
(方括号)与文字'+'
匹配。删除它:
(?<=city-|\+)(?<city>[a-zA-Z\s-]+)(?=\+|$)
你会得到3场比赛:
Rio de Janeiro
Sao Paulo
Belo Horizonte
如下面的测试证明:
使用Ideone进行小型C#测试:
using System;
using System.Text.RegularExpressions;
class Example
{
static void Main()
{
string text = "city-Rio de Janeiro+Sao Paulo+Belo Horizonte";
string pat = @"(?<=city-|\+)(?<city>[a-zA-Z\s-]+)(?=\+|$)";
Regex r = new Regex(pat);
Match m = r.Match(text);
while (m.Success)
{
Console.WriteLine("found: '" + m.Groups[1] + "'");
m = m.NextMatch();
}
}
}
产生了以下输出:
found: 'Rio de Janeiro' found: 'Sao Paulo' found: 'Belo Horizonte'
另请注意,在课程结束时,在字符类之外,-
不需要转义。