首页 > 解决方案 > 从字符串中删除长主题标签跟踪

问题描述

我想要正则表达式,它将删除字符串末尾的主题标签。例如:

*WCW * 14 美元黑色货车(6 号)* 8 美元黑色渔网夹克(大号)* 6 美元长颈鹿背心(小号)* 8 美元牛仔短裤(2 号)* 6 美元红色透视钱包#platosclosetmooresville #platosclosetlakenorman #resale #gentlyused #preloved #lakenorman #mooresville #MVL #LKN #fashionista #recycleyourstyle #cornelius #davidson #concord #kannapolis #statesville #salisbury #bargainista #lknshopping #mooresvilleshopping #GetCash #SellYourItems #shopping #BargainShopper #ShopLocal #PlatosCloset #giraffe #OOTD #WCW

我写了一个正则表达式来匹配主题标签的踪迹。/#[#\w\s]*\z/. 也试过了/#[#\w\s]*$/u。但他们只会回来

#lknshopping #mooresvilleshopping #GetCash #SellYourItems #shopping #BargainShopper #ShopLocal #PlatosCloset #giraffe #OOTD #WCW

它应该捕获所有:

#platosclosetmooresville #platosclosetlakenorman #resale #gentlyused #preloved #lakenorman #mooresville #MVL #LKN #fashionista #recycleyourstyle #cornelius #davidson #concord #kannapolis #statesville #salisbury #bargainista #lknshopping #mooresvilleshopping #GetCash #SellYourItems #shopping #BargainShopper #ShopLocal #PlatosCloset #giraffe #OOTD #WCW

解决方案不应匹配字符串中间的主题标签。

标签: regexstring

解决方案


正则表达式#[#\w\s]*\z从匹配 a 开始,#然后是一个字符类,它将匹配几个字符中的一个。该字符类重复零次或多次,因此它也将匹配###a bc或仅匹配单个开始#

如果您想匹配作为句子尾迹的主题标签,并且中间不能有一个不是主题标签的单词,您可以使用:

#\w+(?:\s+#\w+)*\z

正则表达式演示

解释

  • #从字面上匹配
  • \w+匹配一个单词字符一次或多次
  • (?:非捕获组
    • \s+#\w+匹配一个或多个空格字符,然后#匹配一个或多个单词字符
  • )*关闭非捕获组并重复零次或多次
  • \z断言字符串的结尾

推荐阅读