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+除$
或
之外的任何字符的出现次数$
正向前瞻,在右侧断言(?=
可选重复1个或多个空格字符,后跟除空格或字符以外的任何字符(?:\s+[^\w\s]\s*)*
匹配可选的尾部whitspace字符\s*
字符串结尾$
关闭前瞻)
如果以
$
或#
开头的标记可以包含另一个标记,则另一个选项可以是使用带有捕获组和反向引用的标记方法\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)