将字符串拆分为命令模式

时间:2017-10-03 20:59:08

标签: regex string

我需要获取一串连接的关键字命令和数字,并将命令和数字放入列表中。

模式:

{command words} by {number} {command words} by {number} etc ...

输入字符串:

 "turn right by 1 turn left by 99 up by 11 left by 28"

我以为我可能会分开这个词" by"但这导致第二组拥有数字和下一个命令(例如,左转1)。

正则表达式:

 \sby\s

期望输出:

 turn right by 1 
 turn left by 99 
 up by 11 
 left by 28

所需列表:

 turn right,turn left,up,left
 1,99,11,28

如何拆分遵循该模式的长串命令?

文本是一个没有标点符号的大字符串。单词依次后跟一个数字,模式是一致的。第一部分可能包含一个或两个关键字命令。

1 个答案:

答案 0 :(得分:1)

您的字符串似乎都具有相同的结构:s(一个或多个单词,后跟word or words by 111字面意义,后跟至少一位数字)

代码

See regex in use here

by

结果

输入

(\w[\w ]*?)\s+by\s+(\d+)

输出

  1. 完全匹配:turn right by 1 turn left by 99 up by 11 left by 28
    • 第1组:turn right by 1
    • 第2组:turn right
  2. 完全匹配:1
    • 第1组:turn left by 99
    • 第2组:turn left
  3. 完全匹配:99
    • 第1组:up by 11
    • 第2组:up
  4. 完全匹配:11
    • 第1组:left by 28
    • 第2组:left
  5. 说明

    • 28将以下内容捕获到捕获组1中
      • (\w[\w ]*?)任何单词字符,后跟集\w[\w ]*?(任何单词字符或空格)中的任何内容,任意次数,但尽可能少
    • [\w ]一个或多个空格后跟\s+by\s+字面,后跟一个或多个空格。
    • by将一个或多个数字捕获到捕获组2