正则表达式搜索开始单词的字母和包含另一个单词的下一个单词

时间:2017-04-26 23:02:31

标签: c# asp.net regex

我如何搜索名单列表,只返回以“s”开头的单词和以“mary”开头的下一个单词?

例如,我有2个头衔:“Avera St. Mary's Hospital”和“Maryland的Arthritis Care Specialists”。我搜索'S Mary'并希望它返回“Avera St. Mary's Hospital”而不是“Maryland的关节炎护理专家”。我的代码返回...任何帮助将非常感谢!

var testList = new List<string>();
List<string> titles = new List<string>();
titles.Add("Avera St. Mary's Hospital");
titles.Add("Arthritis Care Specialists of Maryland");
foreach (var title in titles)
{
    var pattern = @"(?<!\w)s.*\smary";
    Regex r = new Regex(pattern, RegexOptions.IgnoreCase);
    Match m = r.Match(title);
    if (m.Success)
    {
        testList.Add(title);
    }
}

3 个答案:

答案 0 :(得分:0)

您需要更改正则表达式,如:

var pattern = @"(?<!\w)s\w+[-| |〜| @ |(|)|。] * [\ S] +玛丽&#34 ;;`

[ - |`|〜| @ |(|)|。] 指定 S * 和Mary之间允许的特殊字符 St-Mary < /强>

答案 1 :(得分:0)

\b之后加上mary - 意味着字边界

demo

答案 2 :(得分:0)

.*是问题中给出的正则表达式中的问题。 .*匹配太多文字。 (将其更改为非贪婪的.*?将无效。)

根据评论中的问题和其他示例,匹配应为:

  • s开头的单词。 &#34; word&#34;的定义不精确但使用&#34;任何不是空格的字符&#34;匹配示例。
  • 两个单词之间的分隔符。假设允许一个或多个空格。
  • 以字母mary开头的单词。任何事情都可能跟随这四个角色。

这导致了简单的正则表达式:\bs[^ ]* +mary

\b               A word boundary
s                This exact character
[^ ]*            Zero or more characters that are not spaces
 +               One or more spaces
mary             These exact characters

对问题和注释中的示例进行组合和排序,这些示例应该匹配:

Avera St. Mary's Hospital
Carondelet St. Mary's Hospital.
Centre Hospitalier St- Mary,
saint mary,
Saint Mary's Home of Erie,
st mary
st mary's
st. mary,

这些是不匹配的示例:

Arthritis Care Specialists of Maryland
Cardiovascular Specialists Of Central Maryland,