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