正则表达式查找以特定字符开头的特定单词

时间:2012-08-21 01:29:10

标签: c# regex asp.net-mvc

使用Regex,我需要在字符串中找到以特定字符开头的单词。该单词必须是字母数字,但可以在单词中包含下划线(_)。在这个词的开头和结尾用下划线是不可接受的。

例如,我有以下字符串。

  

@ word1消息@@ message @ message @ word2_ message @ word#3 @ _word4 mesagge @ word_5

结果应为:

  

@ word1 @ word_5

感谢。

3 个答案:

答案 0 :(得分:2)

使用正则表达式

(?:^|(?<=\s))@(?!_)\w+(?<!_)(?:(?=\s)|$)

(?:^|(?<=\W))@(?!_)\w+(?<!_)(?:(?=\W)|$)

取决于你需要/希望面前/后面......

例如@word1中的@word_5 @word1. @word#2 @word*3应该匹配,将点.视为分隔符或句子结尾。

答案 1 :(得分:1)

这样做 - 边界(第1行和第3行)相当重,因为\b这个词边界在这里不起作用,因为你不想匹配&#34; @ word#3&#34;,&#34;#&#34; &#34; d&#34;触发一个单词边界。

(?<=\s|^)
    @(?!_)\w+(?<!_)
(?=\s|$)

答案 2 :(得分:1)

这个正则表达式会做到!

(?<=(^|\s))@([a-zA-Z0-9]{1}\w*[a-zA-Z0-9]|[a-zA-Z0-9]{1})(?=(\s|$))

它也匹配单个字母

相关问题