捕获可选的周围字符

5 c# regex string parsing

我在正则表达式中并不精通,所以我不确定如何实现以下内容:

我想从输入中捕获任何可能会或可能不会被'$'字符包围的任意字符串.如果字符串开头出现'$'字符,则必须存在末尾的'$'字符.

目前我有

^\w+([_.-]\w+)*$
Run Code Online (Sandbox Code Playgroud)

大致翻译为:

  1. 任意单词字符
  2. 捕获组的开始
  3. 任何字符'_','.',' - '
  4. 在可选之前\n

所以有效的匹配将是:

test
test-5
test.1.3
test-alpha.2
Run Code Online (Sandbox Code Playgroud)

现在我想让这成为可能

$test$
Run Code Online (Sandbox Code Playgroud)

但不是...

$test (or test$)
Run Code Online (Sandbox Code Playgroud)

vks*_*vks 3

^(?:(?:\w+(?:[_.-]\w+)*)|\$test\$)$
Run Code Online (Sandbox Code Playgroud)

最好添加它,|而不是修改原始的。请参见演示。

https://regex101.com/r/wU7sQ0/32