如何匹配直到击中某个角色?

时间:2018-03-20 06:23:38

标签: regex

如果我的问题很愚蠢,我道歉。我几个小时后才开始学习正则表达式。

我正在尝试提取所有主题标签

  • 直到它到达空格或换行符
  • 连续不能超过两个

允许使用特殊字符,直到它到达空格/ hastag /换行符

以下是我目前的正则表达式:\#{1}(\S|\N)

我尝试将其更改为\#{1}.+(\S|\N),因为我认为.+将允许它保持匹配,直到它到达新的行或空格

======================TESTHASH========================
#3!x_j@`(/l3W#qfSnl#6R7x1b,jBb0p#Oq/:o#!tH3AITK^Yyp#B,
#qwe#%#T &#v#v#N###O###2#` `S}^&9 #M # Aa23%2##p#?#w#a
#123#9#Z a%h#&#C###;###? a#u#g#Q#r#8# #a#A#l#p#r#b#}#c
#R#M#(#p###K###l###1###b 2#D\'>.w/Y_2 sha2&2{] #4x$D~kR
#lbTb1k3# #Dlo ## #j# #W H#tjsR.Lzkc  #B*xt&nFty?il#jp
#>p8BTU2###PW!aB###z###-VM (s82hdk#T 8sUJWfuy2#-#f~fh)
#d{jyi|^ofYD#q)!#special~!@$%^&*()#_+`-=[];\',./?><\":}{
======================TESTHASH========================

3 个答案:

答案 0 :(得分:3)

我对你的正则表达式进行了一些修改,以使它与这些匹配:

enter image description here

这是正则表达式:

\#.*?(?=\s|\n|\#|$)

我做出的改变:

  • 使用了懒惰的&#34;零或更多&#34;量词*?。这意味着它将保持匹配,直到(?=\s|\n|\#|$)不为真,而使用贪婪的量词,它将一直匹配到行尾,然后回溯直到(?=\s|\n|\#|$)为真。

  • 已移除{1},这是不必要的

  • 为最后添加了更多选项。我已添加\#$。它们是遇到的角色,应该停止比赛。
  • 使用前瞻。这样可以避免在匹配中获得另一个#

Demo

答案 1 :(得分:3)

#[^#\s\n]+怎么样?

  • 它匹配所有主题标签。
  • 停在空格和换行符处。
  • 它不匹配一行中的两个主题标签。 (这句话有点含糊不清;是##长度为零的两个主题标签,还是零标签?#[^#\s\n]*等同于Sweeper的正则表达式,但没有预见。{{1}另外要求主题标签后面没有零个字符。)
  • 除#标签,空格和换行符之外的hashtag后面允许的所有字符。

这是#[^#\s\n]+匹配的内容:

regex101 match image

似乎暗中拼出了&#34; NICE&#34 ;;我想知道这是一个练习,你是否正在使用StackOverflow为你思考? : - )

答案 2 :(得分:0)

\#[^\s\#]*(\s|\#)

匹配一个#后跟除空白之外的任意数量的字符和#后跟一个空格或#

这应该有效