Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正则表达式搜索一个单词开头的字母和下一个包含另一个单词的单词_C#_Asp.net_Regex - Fatal编程技术网

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

C# 正则表达式搜索一个单词开头的字母和下一个包含另一个单词的单词,c#,asp.net,regex,C#,Asp.net,Regex,如何搜索姓名列表,只返回以“s”开头的单词和以“mary”开头的下一个单词 例如,我有两个头衔:“阿维拉圣玛丽医院”和“马里兰关节炎护理专家”。我搜索“玛丽”,希望它返回“埃弗拉圣玛丽医院”,而不是“马里兰州关节炎护理专家”。我的代码返回两个…任何帮助都将不胜感激 var testList = new List<string>(); List<string> titles = new List<string>(); titles.Add("Avera St.

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

例如,我有两个头衔:“阿维拉圣玛丽医院”和“马里兰关节炎护理专家”。我搜索“玛丽”,希望它返回“埃弗拉圣玛丽医院”,而不是“马里兰州关节炎护理专家”。我的代码返回两个…任何帮助都将不胜感激

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);
    }
}
var testList=newlist();
列表标题=新列表();
标题。添加(“阿维拉圣玛丽医院”);
标题。添加(“马里兰关节炎护理专家”);
foreach(标题中的var标题)
{

var pattern=@”(?您需要更改正则表达式,如下所示:

var模式=@“(?| ~|@|(|)、|]*[\s]+Mary”`


[-| ` ~~~~@(|)|]指定S*和玛丽之间允许的特殊字符,如圣玛丽

玛丽
之后放一个
\b
-这意味着单词边界


问题中给出的正则表达式中存在
*
问题。
*
匹配的文本太多。(将其更改为非贪婪的
*?
将不起作用。)

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

  • s
    开头的单词。“单词”的定义不精确,但使用的“任何非空格字符”与示例相符
  • 两个单词之间的分隔符。假设允许使用一个或多个空格
  • 以字母
    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,

在我看来,它会返回两个值。我认为@Seth Pacheco应该在
mary
之后将表达式改为单词边界或单词结束。我不知道在C#中它的具体转义序列,但他可以搜索。我不确定其他条件,但我在控制台应用程序中测试了这两个输入,刚刚开始output.OP中的e需要澄清接受/拒绝列表中条目的标准。这个答案与示例中的答案是一致的。搜索的标准是返回任何包含“st mary”、“st.mary”、“saint mary”或可能包含复数形式的mary(“mary”)。因此,如果列表中还有两个字符串马里兰州中部心血管专家、“圣玛丽中心医院”、“伊利圣玛丽之家”和“卡伦德雷圣玛丽医院”。我希望搜索到最后三家,而不是第一家(“马里兰州中部心血管专家”)。提前谢了!可以跳过一个词吗?例如,如果我有一个条目名为Albuquerque Associated足病医师”我搜索了'alb podia',然后它会返回该条目。现在,如果我搜索'alb associa',正则表达式模式只会返回“Albuquerque Associated足病医师”(空格后必须是下一个单词。如果它是名称中的一个单词,但不一定是下一个单词怎么办)。我刚刚在本例中替换了正则表达式模式中的's'和'mary'精确字符。您现在是否要匹配原始问题中排除的字符串,如马里兰的
专家