C# c语言中带look-behind和ignore的正则表达式替换#
我需要删除文本中的所有“'s”,除了单词“let's” 例如:“jerry's let's cake's”>>“jerry let's cake” -这是可行的,但在大文本上需要很长时间C# c语言中带look-behind和ignore的正则表达式替换#,c#,regex,C#,Regex,我需要删除文本中的所有“'s”,除了单词“let's” 例如:“jerry's let's cake's”>>“jerry let's cake” -这是可行的,但在大文本上需要很长时间 strText = Regex.Replace(strText, @"\b(?!let's)(?<=[a-z-]+)'s\b", ""); strext=Regex.Replace(strext,@“\b(?!让我们来)(?如果这是您真正需要的,那么它将是并执行以下操作: strText = strTe
strText = Regex.Replace(strText, @"\b(?!let's)(?<=[a-z-]+)'s\b", "");
strext=Regex.Replace(strext,@“\b(?!让我们来)(?如果这是您真正需要的,那么它将是并执行以下操作:
strText = strText.Replace(" let's ", " let''s ")
.Replace("'s", "")
.Replace(" let'", " let's");
如果这是您真正需要的,那么它将是并执行以下操作:
strText = strText.Replace(" let's ", " let''s ")
.Replace("'s", "")
.Replace(" let'", " let's");
老实说,在这种情况下,最好还是走老套的路,沿着绳子走,在“让我们”这个词中跟踪你的位置,特别是处理这个问题
代码(未经测试,但希望您能理解):
StringBuilder=新建StringBuilder();
int-letsPos=-1;
for(int i=0;i
老实说,在这种情况下,最好还是走老式的方式,循序渐进,记住“让我们”这个词中你的位置,特别是处理这个问题
代码(未经测试,但希望您能理解):
StringBuilder=新建StringBuilder();
int-letsPos=-1;
for(int i=0;i
您错过的一个简单技巧是在负回溯中使用\b
:
(?<!\blet)'s
(?您错过的一个简单技巧是在负回溯中使用\b
:
(?<!\blet)'s
(?我也认为您可以编写自己的代码
private string myReplace(string text)
{
if (!text.Contains(' '))
{
return text.ToLower().Equals("let's") ? text : text.Replace("'s", string.Empty);
}
else
{
int index = text.IndexOf(' ');
return myReplace(text.Substring(0, index)) + " " + myReplace(text.Substring(index + 1));
}
}
我还认为您可以编写自己的代码
private string myReplace(string text)
{
if (!text.Contains(' '))
{
return text.ToLower().Equals("let's") ? text : text.Replace("'s", string.Empty);
}
else
{
int index = text.IndexOf(' ');
return myReplace(text.Substring(0, index)) + " " + myReplace(text.Substring(index + 1));
}
}
+1我同意Regex可能不是这里的最佳解决方案。但是,如果原始字符串包含“let'”或“plate's”,则此答案不完美,需要调整。更新,let之前的简单空格:)。是的,如果原始字符串包含无效单词let',则它将不起作用。我希望这是文本的边缘大小写。呢让我们使用“@”
,或(let's)
?A\b
似乎是正确的。有很多边缘大小写必须包含无效的单词。如果这是很有可能的,这将不起作用,但我假设您具有高度有效的文本。+1我同意Regex可能不是这里的最佳解决方案。但是,如果原始字符串包含“let's”“或“血小板”此答案不完美,需要调整。更新,let之前的简单空格:)。是的,如果原始字符串包含无效的单词let,则它将不起作用。我希望这是文本的边缘大小写。关于“let's let'@”
或(let's)呢
?A\b
似乎符合要求。有很多边缘大小写必须包含无效单词。如果很有可能,这将不起作用,但我假设您有高度有效的文本。\b(?@Vildan-它可能工作得更快,但请注意它将忽略“Hello!”
,例如,因为它需要一个\b
在
之前。如果我必须进行优化,我认为最快的应该是's\b(?,这应该很快。\b(?@Vildan-它可能工作得更快,但请注意它会忽略“Hello!”
,例如,因为它需要一个\b
在
之前。如果我必须优化,我认为最快的应该是的\b(?,应该是最快的。