character之替换C#中的字符

Terrylee 阅读:17 2024-11-01 17:39:52 评论:0

我有一个要求。

我有一个可以包含任何字符的文本。

a) 我必须只保留字母数字字符 b) 如果发现单词“The”的前缀或后缀有空格,则需要将其删除。

例如

CASE 1: 
 
 Input:  The Company Pvt Ltd.  
 
 Output: Company Pvt Ltd 
 
But  
 
     Input:  TheCompany Pvt Ltd.  
 
     Output: TheCompany Pvt Ltd 
 
because there is no space between The & Company words. 
 
CASE 2: 
 
Similarly, Input:  Company Pvt Ltd.  The  
 
     Output: Company Pvt Ltd 
 
But Input:  Company Pvt Ltd.The  
 
     Output: Company Pvt Ltd 
 
Case 3: 
 
Input: Company@234 Pvt; Ltd. 
 
Output: Company234 Pvt Ltd 
 
No , or . or any other special characters. 

我基本上是将数据设置为一些变量,例如

 _company.ShortName = _company.CompanyName.ToUpper(); 

所以在保存的时候我什么也做不了。只有当我从数据库中获取数据时,我才需要应用此过滤器。数据来自 _company.CompanyName

我必须对其应用过滤器。

到此为止

public string ReplaceCharacters(string words) 
{ 
    words = words.Replace(",", " "); 
    words = words.Replace(";", " "); 
    words = words.Replace(".", " "); 
    words = words.Replace("THE ", " "); 
    words = words.Replace(" THE", " "); 
    return words; 
} 
 
private void button1_Click(object sender, EventArgs e) 
{ 
    MessageBox.Show(ReplaceCharacters(textBox1.Text.ToUpper())); 
} 

提前致谢。我正在使用 C#

请您参考如下方法:

这是一个与您提供的案例相匹配的基本正则表达式。需要注意的是,正如 Kobi 所说,您提供的案例不一致,所以我从前四个测试中去掉了时间段。如果两者都需要,请添加评论。

这可以处理您需要的所有情况,但边缘情况的迅速扩散让我觉得也许您应该重新考虑最初的问题?

    [TestMethod] 
    public void RegexTest() 
    { 
        Assert.AreEqual("Company Pvt Ltd", RegexMethod("The Company Pvt Ltd")); 
        Assert.AreEqual("TheCompany Pvt Ltd", RegexMethod("TheCompany Pvt Ltd")); 
        Assert.AreEqual("Company Pvt Ltd", RegexMethod("Company Pvt Ltd. The")); 
        Assert.AreEqual("Company Pvt LtdThe", RegexMethod("Company Pvt Ltd.The")); 
        Assert.AreEqual("Company234 Pvt Ltd", RegexMethod("Company@234 Pvt; Ltd.")); 
        // Two new tests for new requirements 
        Assert.AreEqual("CompanyThe Ltd", RegexMethod("CompanyThe Ltd.")); 
        Assert.AreEqual("theasdasdatheapple", RegexMethod("the theasdasdathe the the the ....apple,,,, the")); 
        // And the case where you have THETHE at the start 
        Assert.AreEqual("CCC", RegexMethod("THETHE CCC")); 
    } 
 
    public string RegexMethod(string input) 
    {    
        // Old method before new requirement           
        //return Regex.Replace(input, @"The | The|[^A-Z0-9\s]", string.Empty, RegexOptions.IgnoreCase);   
        // New method that anchors the first the           
        //return Regex.Replace(input, @"^The | The|[^A-Z0-9\s]", string.Empty, RegexOptions.IgnoreCase);             
        // And a third method that does look behind and ahead for the last test 
        return Regex.Replace(input, @"^(The)+\s|\s(?<![A-Z0-9])[\s]*The[\s]*(?![A-Z0-9])| The$|[^A-Z0-9\s]", string.Empty, RegexOptions.IgnoreCase); 
    } 

我还在我的示例中添加了一个测试方法,该方法使用包含正则表达式的 RegexMethod。要在您的代码中使用它,您只需要第二种方法。


标签:C#
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号