繁体   English   中英

如何在要删除的句子末尾删除带有 # 或 $ 的单词(正则表达式)

[英]How to remove words with # or $ at the end of a sentence to be removed (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 for:We are happy to announce NIX Platform is rebranding to..  >  > 

目前我有#(??(:?hashtag)\b)[\w-]+(?=(::\s+#[\w-]+)*\s*$)作为正则表达式,它使用 # 删除单词从头开始,但不是 $,不确定我还需要包含哪些内容

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

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

正则表达式演示

正则表达式解释:

  • [#$@] : 匹配#$@
  • \w+b :匹配 1+ 个单词字符,后跟单词边界
  • (?!\W*\s\w) :否定前瞻断言我们在当前 position 前面的空格后没有单词字符

或者,您也可以使用 *atomic group` 来禁止回溯:

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

您可以使用积极的前瞻并断言直到字符串结尾所有单词都以非单词字符开头。

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

正则表达式演示


如果以$#开头可以包含另一个,另一种选择可能是使用带有捕获组和反向引用\1的缓和贪婪令牌方法。

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

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

正则表达式演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM