正则表达式用哈希标记捕获括号?

时间:2013-11-04 23:07:16

标签: c# .net regex

到目前为止,我有完美的正则表达式:

(?:(?<=\s)|^)#(\w*[A-Za-z_]+\w*)

它找到以散列标记开头的任何单词(例如#lolz但不是hsshs #jdjd)

问题是我还希望它匹配括号。所以,如果我有这个,它将匹配:

(#lolz哇)

或 (哇#cool)

(#cool)

关于如何制作或使用我的正则表达式来解决这个问题的任何想法?

2 个答案:

答案 0 :(得分:3)

以下似乎对我有用......

\(?#(\w*[A-Za-z_]+\w*)\)?

答案 1 :(得分:3)

你在上下文中使用以下内容的方式是矫枉过正..

\w*[A-Za-z_]\w*

\w 匹配字符(a-zA-Z0-9_)。并且没有必要使用非捕获组(?:来围绕您的lookbehind断言。

我相信以下就足够了。

(?<=^|\s)\(?#(\w+)\)?

正则表达式:

(?<=         look behind to see if there is:
 ^           the beginning of the string
 |           OR
  \s         whitespace (\n, \r, \t, \f, and " ") 
)            end of look-behind
\(?          '(' (optional (matching the most amount possible))
 #           '#'
  (          group and capture to \1:
   \w+       word characters (a-z, A-Z, 0-9, _) (1 or more times)
  )          end of \1
 \)?         ')' (optional (matching the most amount possible))

请参阅live demo

如果你愿意,你也可以在这里使用负面的背后隐藏。

(?<![^\s])\(?#(\w+)\)?