繁体   English   中英

如何使用正则表达式匹配不以某些字符开头或结尾的单词?

[英]How to match words that doesn't start nor end with certain characters using Regex?

我想找到不以某些特定字符开头或结尾的单词匹配。

例如,我有这个输入,我只想匹配突出显示的单词:

“字符串”字符串“字符串”

并排除其他以"'开头和结尾的单词。

我目前正在使用这种模式:

在此处输入图像描述

但是我不知道应该使用什么模式来排除以某些指定字符开头和结尾的单词。

有人可以就我应该使用什么模式给我一些建议吗? 谢谢

您当前使用的模式匹配,因为\b正确断言了"sg"之间的位置(单词字符[a-zA-Z0-9_]和非单词字符之间的 position)。 您可以使用以下方法之一:

  1. 否定特定字符(否定后视/前瞻)
    • 此方法允许您指定一个字符、一组字符或 substring 以从匹配中求反。
    • (?<?['"])\bstring\b(?!['"]) -在此处查看它的使用情况
      • (?<!['"]) - 确保"不在前面。
      • (?!['"]) - 确保"不会继续。
  2. 允许特定字符(正向向后看/向前看)
    • 此方法允许您指定一个字符、一组字符或 substring 以确保匹配。
    • (?<=\s|^)\bstring\b(?=\s|$) -在此处查看它的使用情况
      • (?<=\s|^) - 确保空格或行首在前。
      • (?=\s|$) - 确保空格或行尾继续。
  3. 以上两者的结合
    • 此方法允许您否定特定情况,同时允许其他情况(不常用,也不是所提出的问题真正需要的,但可能对您或其他人有用。
    • (?<=\s|^)string(??\s+(?!stop)|$)之类的东西会确保单词后面没有单词stop
    • (?<=(?<?stop\s*)\s+|^)string(?=\s+|$)之类的东西会确保单词不跟随单词stop - 请注意后视中的量词( \s+ )在大多数正则表达式引擎中是不允许的,.NET 允许它。
    • (?<=\s|^)\bstring\b(?=\s|$)(?!\z)之类的东西会确保单词不在字符串的末尾(如果多行)。

如果它在空格之间,此正则表达式将选择字符串\sstring\s

var sample = "\"string\" string \"string\" astring 'string_ string?string string ";
var regx = new Regex(@"\sstring\s");
var matches = regx.Matches(sample);
foreach (Match mt in matches)
{
    Console.WriteLine($"{mt.Value} {mt.Index,3} {mt.Length,3}");
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM