使用正则表达式来拉一个或两个单词

时间:2014-07-31 13:49:23

标签: regex

输入:

"2012 Dodge Challenger SRT8, Supercharged, Amber White $40,000"
"2013 Audi s7, Prestige Package, Grey $79,000"
"2014 Porsche 911, Black $113,000"
"2015 Range Rover Sport, Navy Blue $84,000"

预期产出:

Amber White
Grey
Black
Navy Blue

我想使用regex和outwit hub来抓取这些信息 我在outwit之前和之后使用mark(,)成功地删除了大部分内容,但是我遇到麻烦的是一些列表有2个字的颜色而有些列表有一个。 " Amber White, Grey, Black Mist...&#34 ;.
此外,我无法在之前或之后使用该标记,因为这些单词位于独特的短语之内 任何人都可以帮我解决如何使用正则表达式准确提取颜色信息。

2 个答案:

答案 0 :(得分:1)

这里你走了,这是一个使用正面观察和积极展望的优雅解决方案

<强>正则表达式

(?<=,\s)([\w\s]+)(?=\s\$)

测试字符串

"2012 Dodge Challenger SRT8, Supercharged, Amber White $40,000"
"2013 Audi s7, Prestige Package, Grey $79,000"
"2014 Porsche 911, Black $113,000"
"2015 Range Rover Sport, Navy Blue $84,000"

<强>结果

MATCH 1

  1. [43-54] Amber White
  2. MATCH 2

    1. [97-101] Grey
    2. MATCH 3

      1. [130-135] Black
      2. MATCH 4

        1. [171-180] Navy Blue
        2. 尝试regex101.com

答案 1 :(得分:0)

我认为这应该适合你:

(?<=,\s)(\w+|\w+\s+\w+)(?=\s+(?:\$|\d|Size))

测试here

注意:这假设价格总是在它之前有一个美元符号,并且颜色在价格之前直接始终

测试:

"2012 Dodge Challenger SRT8, Supercharged, Amber White $40,000"   
"2013 Audi s7, Prestige Package, Grey $79,000"   
"2014 Porsche 911, Black $113,000" 
"2015 Range Rover Sport, Navy Blue $84,000"
"Amazon Fire Phone, Black 32GB (AT&T)" 
"LG G3, Fire Red 16GB (Tmobile)
Diesel Jeans, Safado Straight, Midnight Black Size 36/34

输出:

MATCH 1
1.  [43-54] `Amber White`
MATCH 2
1.  [98-102]    `Grey`
MATCH 3
1.  [132-137]   `Black`
MATCH 4
1.  [174-183]   `Navy Blue`
MATCH 5
1.  [213-218]   `Black`
MATCH 6
1.  [241-249]   `Fire Red`
MATCH 7
1.  [296-310]   `Midnight Black`

正则表达式的细分:

(?<=,\s):断言COLOR之前有一个,<space> (\w+|\w+\s+\w+):查找并捕获构成COLOR的字母 (?=\s+(?:\$|\d|Size)):断言后面跟着一个$或一个数字或字符Size到COLOR右边