正则表达式在两个指定字符之间获取任何内容

时间:2015-07-03 04:05:15

标签: regex

我是正则表达式的新手,我试图在'#'和空格或任何空格之间获取所有字符串。

我有一个这样的字符串:

gray 47 #787878 120 120 120 7895160  
gray 46 #757575 117 117 117 7697781
gray 45 #737373 115 115 115 7566195
gray 44 #707070 112 112 112 7368816
gray 43 #6E6E6E 110 110 110 7237230
gray 42 #6B6B6B 107 107 107 7039851

我想从中获取RGB代码:

787878
757575
737373
707070
6E6E6E
6B6B6B

我正在尝试这样的正则表达式:

\#\w+\s

我正在regex101.com进行测试,并说:没有匹配。

我做错了什么?

3 个答案:

答案 0 :(得分:2)

你不应该逃避八角星;它只是一个字面上的'#'字符。此外,如果您不想保留空间,则应将其设为非捕获空间。如下所示:

/(?:#)(\w+)(?:\s)/g

事实上,你应该能够只指定6位数的字母数字,使其更具体,然后它就不会寻找下划线,例如:

/(?:#)([\da-zA-Z]{6})/g

修改

添加括号以使其捕获您关注的数据。

编辑2:

  

请你详细说明'你不应该需要什么'   逃避octothorpe'和'使它不捕获'分开   正则表达式的例子。

正则表达式引擎赋予某些字符特殊含义。以下是一些例子:

$
^
.
+

如果你想使用正则表达式逐字匹配任何这些字符,你就可以“逃避”这些字符。例如,如果你有这样的文字:“?$ ^ EATING ??”你想匹配“EATING ??”,你需要写一个这样的正则表达式:EATING\?\?因为“?”很特别。

如果你将一个\放在一个特殊字符前面,这称为“转义”它,以便正则表达式引擎将其视为文字字符。

octothorpe字符(此事:是一个特殊字符,因此您无需转义它。字面意思是对待,就像下面的字符一样:8 o

此外,您可以使用正则表达式来查找内容,但不能“捕获”这些内容。这是一种说法如下:

“我想找一个'a',然后是'b',然后是'c',但我想保留'a'和'b'并扔掉'c'。”

非捕获组是您通常如何实现此目标的。

答案 1 :(得分:1)

你应该使用积极的外观和积极的前瞻:

/(?<=#)\w+(?=\s)/g

这只会匹配&#39;#&#39;之间的所有字符串。和空间或任何空白区域。

<强>输出

787878
757575
737373
707070
6E6E6E
6B6B6B
  

积极的背后隐藏

     

?<=的正向后视检查其子模式可以立即匹配到文本字符串中当前位置的左侧。

正则表达式(?<=#)\w+\s787878匹配,但前提是#

  

积极前瞻

     

前面有?=的正向前瞻,以确保其子模式可以匹配。

正则表达式#\w+(?=\s)#787878匹配,但前提是后跟/s(任何空格字符)。

因此,您应该使用匹配/(?<=#)\w+(?=\s)/g的正则表达式/(?<=#)\w+/g787878,如果后跟/s且前面有#

答案 2 :(得分:0)

您的解决方案

\#\w+\s

为我匹配所有行,所以我怀疑你在网站上做错了什么。如果您剪切并粘贴,请务必使用&#34;粘贴为纯文本&#34;。尝试逐位构建正则表达式,并确保每次都按预期匹配。 例如

#

然后

#\w

这应该做你想要的事情

#(\w+\s)