如果不包含方括号,我必须解析文本,其中与是关键字。我必须将关键字与相匹配。此外,在和的两边都必须有字边界。正则表达式匹配不包围括号的字符串
下面是一些例子,其中与不是关键字:
- [与]
- [与]
- [sometext与sometext]
- [sometext与]
- [with sometext]
下面是一些例子,其中与 IS关键字
- 与
- ]与
- 你好与
- 你好与世界
- 你好[世界]与喂
- 你好[世界]跟你好[世界]
无论如何他的LP? 在此先感谢。
如果不包含方括号,我必须解析文本,其中与是关键字。我必须将关键字与相匹配。此外,在和的两边都必须有字边界。正则表达式匹配不包围括号的字符串
下面是一些例子,其中与不是关键字:
下面是一些例子,其中与 IS关键字
无论如何他的LP? 在此先感谢。
你可以查找单词with
,看到最接近支架的左侧是不是一个开放支架,而最接近的支架其右侧是不是一个右括号:
Regex regexObj = new Regex(
@"(?<! # Assert that we can't match this before the current position:
\[ # An opening bracket
[^[\]]* # followed by any other characters except brackets.
) # End of lookbehind.
\bwith\b # Match ""with"".
(?! # Assert that we can't match this after the current position:
[^[\]]* # Any text except brackets
\] # followed by a closing bracket.
) # End of lookahead.",
RegexOptions.IgnorePatternWhitespace);
Match matchResults = regexObj.Match(subjectString);
while (matchResults.Success) {
// matched text: matchResults.Value
// match start: matchResults.Index
// match length: matchResults.Length
matchResults = matchResults.NextMatch();
}
的周围的表情并不止于换行;如果您希望单独评估每条生产线,请使用[^[\]\r\n]*
而不是[^[\]]*
。
你会想看看负面的后视和负面的前瞻,这将帮助你匹配你的数据,而不消耗括号。
不错的问题。我认为找到适用于您的[with]
模式的匹配会比较容易,然后反转结果。
您需要匹配[
,后面没有]
,接着with
(然后用于闭合方括号的相应图案)
选配[
和with
是容易的。
\[with
添加先行排除]
,并且还允许任何数目的其它字符(.*
)
\[(?!]).*with
那么相应的关闭方括号,即具有反向预搜索相反。
\[(?!]).*with.*\](?<1[)
多一点调整
\[(?!(.*\].*with)).*with.*\](?<!(with.*\[.*))
,现在如果你反了,你应该有你想要的结果。 (即,当这返回'真',你的模式匹配,并希望排除这些结果)。
我认为最简单的解决方案是抢先匹配平衡的括号及其内容对,以便在您搜索关键字时将它们排除在外。这里是一个例子:
string s =
@"[with0]
[ with0 ]
[sometext with0 sometext]
[sometext with0]
[with0 sometext]
with1
] with1
hello with1
hello with1 world
hello [ world] with1 hello
hello [ world] with1 hello [world]";
Regex r = new Regex(@"\[[^][]*\]|(?<KEYWORD>\bwith\d\b)");
foreach (Match m in r.Matches(s))
{
if (m.Groups["KEYWORD"].Success)
{
Console.WriteLine(m.Value);
}
}
Upvoting这个,不错的一个艾伦。 :)不管你信不信,我只看到了其他三个使用这种技术的问题,尽管看到了许多类似的问题。 – zx81
@Tim:你的解决方案真的帮了我很多。现在我有类似的问题,只是,括号将被替换为引号。我的意思是''有一些文字的文字“'不是关键字。我试图用引号替换括号,但它不起作用。在Regex中我真的很糟糕,我需要你的帮助。谢谢:) – Mohayemin
@Mohaimin,看看[这个问题](http://stackoverflow.com/questions/6111749/replace-whitespace-outside-quotes-using-regular-expression/6112179#6112179)这是一个非常相似问题;只需用'\ bwith \ b'替换正则表达式中的'[\]'部分,你应该很好走。 –
@Tim:谢谢,那很完美。我只需要稍作修改,因为我必须将引用正则表达式与上面给出的正则表达式合并。它工作得很好:D – Mohayemin