我如何搜索名单列表,只返回以“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);
}
}
答案 0 :(得分:0)
您需要更改正则表达式,如:
var pattern = @"(?<!\w)s\w+[-|
|〜| @ |(|)|。] * [\ S] +玛丽&#34 ;;`
[ - |`|〜| @ |(|)|。] 指定 S * 和Mary之间允许的特殊字符 St-Mary < /强>
答案 1 :(得分:0)
在\b
之后加上mary
- 意味着字边界。
答案 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,