C# 如何删除句子末尾带有#或$的单词(Regex)

C# 如何删除句子末尾带有#或$的单词(Regex),c#,regex,C#,Regex,我有以下资料: The moment #BTC, we have all $BTC been waiting for:We are happy to announce NIX Platform is rebranding to.. $NBT > $VOICE $NIX > $MUTE $ETH $BTC #BTC 我只想删除结尾处带有#或$的单词,而不是中间的,因此上面的字符串如下所示 The moment #BTC, we have all $BTC been waiting f

我有以下资料:

The moment #BTC, we have all $BTC been waiting for:We are happy to announce NIX Platform is rebranding to.. $NBT > $VOICE $NIX > $MUTE $ETH $BTC #BTC
我只想删除结尾处带有#或$的单词,而不是中间的,因此上面的字符串如下所示

The moment #BTC, we have all $BTC been waiting for:We are happy to announce NIX Platform is rebranding to..  >  > 

目前我有
#(?!(?:hashtag)\b)[\w-]+(?=(?:\s+#[\w-]+)*\s*$)
作为正则表达式,它可以删除结尾带有#但不是$的单词,但不确定我还需要包含哪些内容

您可以使用正向前瞻,并断言在字符串结尾之前,所有单词都以非单词字符开头

[#$][^\s$#]+(?=(?:\s+[^\w\s]\S*)*\s*$)
  • [#$][^\s$#]+
    匹配
    $
    和1+除
    $
    之外的任何字符的出现次数
  • (?=
    正向前瞻,在右侧断言
    • (?:\s+[^\w\s]\s*)*
      可选重复1个或多个空格字符,后跟除空格或字符以外的任何字符
    • \s*
      匹配可选的尾部whitspace字符
    • $
      字符串结尾
  • 关闭前瞻


如果以
$
#
开头的标记可以包含另一个标记,则另一个选项可以是使用带有捕获组和反向引用的标记方法
\1

为了防止部分匹配,您可以在左侧添加断言空白边界

(?<!\S)([#$])(?:(?!\1)\S)*(?=(?:\s+[^\w\s]\S*)*\s*$)
(?

一个可选正则表达式,具有单词边界和负前瞻性,以禁止空格后面的任何单词字符:

[#$@]\w+\b(?!\w*\s\w)

正则表达式解释:

  • [#$@
    :匹配
    $
    @
  • \w+b
    :匹配1+个单词字符,后跟单词边界
  • (?!\W*\s\W)
    :负向前看,断言当前位置前面的空格后面没有单词字符
或者,您也可以使用*atomic group`来禁止回溯:

[#$@](?>\w+)(?!\W*\s\w)

@阿努巴瓦当然会,我已经把它改成了积极的前瞻。你可以发布你的模式:-)积极的前瞻更好++我喜欢:-)你是大师,我是apprentice@anubhava.net不支持所有格限定符,有更好的方法吗?另外,我如何添加另一个项目,希望它删除带有#、$和@@Zoinky的单词:请尝试:
[#@$]\w+\b(?!\w*\s\w)