C# 使用正则表达式进行字符串操作

C# 使用正则表达式进行字符串操作,c#,windows,regex,C#,Windows,Regex,我有像CAIRN-CA-200这样的字符串,希望将CA与该字符串匹配,并希望替换 它带有string.empty,但不应替换为CAIRN,它应替换为CA 由hypen(-)连接。该字符串也可以是CAIRN CA 200,那么它也应该匹配 由于只有CA字,它不应该与CAIRN匹配,这意味着字符串应该匹配 对于像这里这样的整个单词,它是CA,不应该与任何 单词如何做到这一点 有一件事是,在这个词之前和之后,将不会有任何字母或字母顺序 像这里这样的数字字符是连字符 所以,一个解决方案是看单词的开头和结

我有像CAIRN-CA-200这样的字符串,希望将CA与该字符串匹配,并希望替换 它带有string.empty,但不应替换为CAIRN,它应替换为CA 由hypen(-)连接。该字符串也可以是CAIRN CA 200,那么它也应该匹配 由于只有CA字,它不应该与CAIRN匹配,这意味着字符串应该匹配 对于像这里这样的整个单词,它是CA,不应该与任何 单词如何做到这一点

有一件事是,在这个词之前和之后,将不会有任何字母或字母顺序 像这里这样的数字字符是连字符

所以,一个解决方案是看单词的开头和结尾是否不是字母或数字 那么这个词应该是匹配的,但我不知道怎么写正则表达式。就是 如何匹配包含非字母或数字字符的单词

我试过使用字符串
regex=“^[a-zA-Z0-9_234;]”+“CA”+“^[a-zA-Z0-9_234;]”
之类的东西,但它不起作用

resultString = Regex.Replace(subjectString, @"\bCA\b", "");
CA
替换为nothing,前提是它是一个完整的单词
\b
是一个单词边界锚定,它只匹配字母数字“单词”的开头或结尾

正则表达式失败,因为
^
位于字符类之外,表示“字符串开头匹配”

如果还希望替换周围的字符,可以使用

 "[^a-zA-Z0-9_]" + "CA" + "[^a-zA-Z0-9_]"
在character类中,
^
也会按照您的意图否定类的内容。请注意,如果
CA
位于字符串的开头或结尾,则此操作将失败

var r = "CA";
var source = "CAIRN-CA-200";
var result = Regex.Replace(source, "([^\\w\\d_])" + r + "\\1", "$1$1");
这将替换未被a-z、0-9或u包围的任何R,只要它们匹配,以下允许不同的包围,并将在字符串的开头或结尾匹配

var r = "CA";
var source = "CAIRN-CA-200";
var result = Regex.Replace(source, "([^\\w\\d_]|^)" + r + "([^\\w\\d_]|$)", "$1$2");
这是我对第二个正则表达式的Linqpad测试

void Main()
{
    Rep("CAIRN-CA-200", "CA").Dump();
    Rep("CAIRN", "CA").Dump();
    Rep("CAIRN CA 200", "CA").Dump();
    Rep("CA 200", "CA").Dump();
    Rep("CA", "CA").Dump();
    Rep("CAIRN CA", "CA").Dump();

}

// Define other methods and classes here
string Rep(string s, string r)
{
    return Regex.Replace(s, "([^\\w\\d_]|^)" + r + "([^\\w\\d_]|$)", "$1$2");
}
结果如何

CAIRN-CA-200 => CAIRN--200
CAIRN => CAIRN
CAIRN CA 200 => CAIRN  200
CA 200 => 200
CA =>
CAIRN CA => CAIRN 

对不起,你的第一个正则表达式对我来说很好。这是用来替换为空的,但在替换之前,我是否可以检查字符串CAIRN-CA-或CAIRN-PA中是否有@“\bCA\b”?因为我有更多的东西要检查这个字符串,比如它是否包含PA字,然后用空替换它,比如它是否包含PUT,用空替换PUT等等。我不太确定我是否理解。是否要在单个正则表达式中将
CA
PA
PUT
替换为空?没问题:
@“\b(CA|PA|PUT)\b”
将匹配其中任何一个。