Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.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# - Fatal编程技术网

C# 从完整联系人姓名中删除标题

C# 从完整联系人姓名中删除标题,c#,C#,我正在编写一个小函数,从完整的联系人姓名字段中删除常见的标题。这就是我到目前为止所做的: string[] CommonTitles = new string[] { "MR ", "MRS ", "MS ", "MISS ", "DR ", "HERR ", "MONSIEUR ", "HR ", "FRAU ", "A V M ", "ADMIRAAL ", "ADMIRAL ", "ALDERMAN ", "ALHAJI ", "AMBASSADOR ",

我正在编写一个小函数,从完整的联系人姓名字段中删除常见的标题。这就是我到目前为止所做的:

string[] CommonTitles = new string[] { "MR ", "MRS ", "MS ", "MISS ", "DR ", "HERR ", "MONSIEUR ", "HR ", "FRAU ", "A V M ", "ADMIRAAL ", 
                "ADMIRAL ", "ALDERMAN ", "ALHAJI ", "AMBASSADOR ", "BARON ", "BARONES ", "BRIG ", "BRIGADIER ", "BROTHER ", "CANON ", "CAPT ", "CAPTAIN ", 
                "CARDINAL ", "CDR ", "CHIEF ", "CIK ", "CMDR ", "COL ", "COLONEL ", "COMMANDANT ", "COMMANDER ", "COMMISSIONER ", "COMMODORE ", "COMTE ", 
                "COMTESSA ", "CONGRESSMAN ", "CONSEILLER ", "CONSUL ", "CONTE ", "CONTESSA ", "CORPORAL ", "COUNCILLOR ", "COUNT ", "COUNTESS ", "AIR CDRE ", 
                "AIR COMMODORE ", "AIR MARSHAL ", "AIR VICE MARSHAL ", "BRIG GEN ", "BRIG GENERAL ", "BRIGADIER GENERAL ", "CROWN PRINCE ", "CROWN PRINCESS ", 
                "DAME ", "DATIN ", "DATO ", "DATUK ", "DATUK SERI ", "DEACON ", "DEACONESS ", "DEAN ", "DHR ", "DIPL ING ", "DOCTOR ", "DOTT ", "DOTT SA ", 
                "DR ", "DR ING ", "DRA ", "DRS ", "EMBAJADOR ", "EMBAJADORA ", "EN ", "ENCIK ", "ENG ", "EUR ING ", "EXMA SRA ", "EXMO SR ", "F O ", 
                "FATHER ", "FIRST LIEUTIENT ", "FIRST OFFICER ", "FLT LIEUT ", "FLYING OFFICER ", "FR ", "FRAU ", "FRAULEIN ", "FRU ", "GEN ", "GENERAAL ", 
                "GENERAL ", "GOVERNOR ", "GRAAF ", "GRAVIN ", "GROUP CAPTAIN ", "GRP CAPT ", "H E DR ", "H H ", "H M ", "H R H ", "HAJAH ", "HAJI ", 
                "HAJIM ", "HER HIGHNESS ", "HER MAJESTY ", "HERR ", "HIGH CHIEF ", "HIS HIGHNESS ", "HIS HOLINESS ", "HIS MAJESTY ", "HON ", "HR ", 
                "HRA ", "ING ", "IR ", "JONKHEER ", "JUDGE ", "JUSTICE ", "KHUN YING ", "KOLONEL ", "LADY ", "LCDA ", "LIC ", "LIEUT ", "LIEUT CDR ", 
                "LIEUT COL ", "LIEUT GEN ", "LORD ", "MADAME ", "MADEMOISELLE ", "MAJ GEN ", "MAJOR ", "MASTER ", "MEVROUW ", "MISS ", "MLLE ", "MME ", 
                "MONSIEUR ", "MONSIGNOR ", "MSTR ", "NTI ", "PASTOR ", "PRESIDENT ", "PRINCE ", "PRINCESS ", "PRINCESSE ", "PRINSES ", "PROF ", 
                "PROF DR ", "PROF SIR ", "PROFESSOR ", "PUAN ", "PUAN SRI ", "RABBI ", "REAR ADMIRAL ", "REV ", "REV CANON ", "REV DR ", "REV MOTHER ", 
                "REVEREND ", "RVA ", "SENATOR ", "SERGEANT ", "SHEIKH ", "SHEIKHA ", "SIG ", "SIG NA ", "SIG RA ", "SIR ", "SISTER ", "SQN LDR ", "SR ", 
                "SR D ", "SRA ", "SRTA ", "SULTAN ", "TAN SRI ", "TAN SRI DATO ", "TENGKU ", "TEUKU ", "THAN PUYING ", "THE HON DR ", "THE HON JUSTICE ", 
                "THE HON MISS ", "THE HON MR ", "THE HON MRS ", "THE HON MS ", "THE HON SIR ", "THE VERY REV ", "TOH PUAN ", "TUN ", "VICE ADMIRAL ", 
                "VISCOUNT ", "VISCOUNTESS ", "WG CDR " };



            string returnName = textBox1.Text.ToUpper();

            foreach (string title in CommonTitles)
            {
                returnName = returnName.Replace(title, "");
            }

            MessageBox.Show(returnName);
然而,我刚刚试着用以下输入来测试这一点:坤英阿布迪纳TOH MAJOR先生但我得到了回报:坤亚布迪纳TOH MAJOR

有什么比使用替换函数更好的方法吗


提前感谢您的帮助。

您可以使用正则表达式。首先,您必须删除所有标题的尾随空格。然后,您可以使用锚点
\b
在单词边界上进行匹配。为了避免额外的空格,您还需要匹配标题前面或后面的空格(我在标题后面使用
\s*
)。您可能仍有尾随空格,因此还需要
Trim()
字符串:

var regex = new Regex(@"\b(" + string.Join("|", CommonTitles) + @")\b\s*");
var result = regex.Replace("KHUN YING ABU DINA MR MRS TOH MAJOR", String.Empty).Trim();
这导致:

ABU DINA TOH 现在的结果是:

Abu Dina Toh 阿布迪纳托
您可以使用正则表达式。首先,您必须删除所有标题的尾随空格。然后,您可以使用锚点
\b
在单词边界上进行匹配。为了避免额外的空格,您还需要匹配标题前面或后面的空格(我在标题后面使用
\s*
)。您可能仍有尾随空格,因此还需要
Trim()
字符串:

var regex = new Regex(@"\b(" + string.Join("|", CommonTitles) + @")\b\s*");
var result = regex.Replace("KHUN YING ABU DINA MR MRS TOH MAJOR", String.Empty).Trim();
这导致:

ABU DINA TOH 现在的结果是:

Abu Dina Toh 阿布迪纳托
它不替换MAJOR的原因是您的常用标题在每个标题旁边都有空格,而示例中的MAJOR没有空格(因为它是最后一个单词)。这是一个非常难看的函数,并且容易出错。在调试器中运行它,在替换上有一个断点-我敢打赌你有两个或多个标题冲突。这不是删除标题的方法。如果在Mr和Mrs之后有一个点,比如
“Mr.Toh Major”
,那么它将成为
“.Toh Major
?使用带有单词边界替换的正则表达式,而不是在筛选字符串中包含空格。@Nikhil Agrawal,我在FullContactName字段上执行其他数据清理例程,如删除点等。。。所以这不应该引起问题。它不取代MAJOR的原因是您的常用标题在每个标题旁边都有空格,而示例中的MAJOR没有空格(因为它是最后一个单词)。这是一个非常难看的函数,并且容易出错。在调试器中运行它,在替换上有一个断点-我敢打赌你有两个或多个标题冲突。这不是删除标题的方法。如果在Mr和Mrs之后有一个点,比如
“Mr.Toh Major”
,那么它将成为
“.Toh Major
?使用带有单词边界替换的正则表达式,而不是在筛选字符串中包含空格。@Nikhil Agrawal,我在FullContactName字段上执行其他数据清理例程,如删除点等。。。所以这不应该引起问题。谢谢马丁。这太棒了!谢谢你,马丁。这太棒了!