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

本文关键字:字符串 操作 正则表达式 | 更新日期: 2023-09-27 17:53:28

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

有一点是,在这个词之前和之后,不会有任何字母或像这里这样的数字字符是连字符。

因此,一种解决方案是查看单词的开头和结尾是否不是字母表或数字那么这个词应该匹配,但我不知道如何为此编写regex。这就是如何匹配非字母或数字字符所包含的单词?

我试过使用类似字符串regex ="^[a-zA-Z0-9_]" + "CA" + "^[a-zA-Z0-9_]"的东西,但它不起作用。

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

resultString = Regex.Replace(subjectString, @"'bCA'b", "");

仅当CCD_ 2作为一个完整单词被找到时。'b是一个单词边界锚,仅在字母数字"单词"的开头或结尾匹配。

正则表达式失败是因为^位于字符类之外,意思是"字符串开头匹配"。

如果你也想替换周围的字符,你可以使用

 "[^a-zA-Z0-9_]" + "CA" + "[^a-zA-Z0-9_]"

在一个字符类中,^否定了该类的内容,正如您所希望的那样。请注意,如果CA位于字符串的开头或末尾,则此操作将失败。

var r = "CA";
var source = "CAIRN-CA-200";
var result = Regex.Replace(source, "([^''w''d_])" + r + "''1", "$1$1");

这将替换任何没有被a-z、0-9或_包围的R,只要它们匹配,以下允许不同的包围,并且将在字符串的开头或结尾匹配

var r = "CA";
var source = "CAIRN-CA-200";
var result = Regex.Replace(source, "([^''w''d_]|^)" + r + "([^''w''d_]|$)", "$1$2");

这是我第二次Regex的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