python - 使用正则表达式和 python 解析命令

标签 python regex parsing command

我有一个像这样的字符串:

str = "something move 11 something move 12 something 13 copy 14 15"

其中“某物”表示一些文本,或者根本没有文本。
因此我想要一个像这样的列表:

[('move', 11, ''), ('move', 12, 13), ('copy', 14, 15)]

我尝试使用这个:

re.findall('(move|copy).+?([0-9]+).+?([0-9]+)*', str)

但它给出了我的输出:

[('move', 11, ''), ('move', 12, ''), ('copy', 14, '')]

我知道这是因为最后一个数字是可选的,但我只是不知道它如何才能工作。

我该怎么做?

最佳答案

基于@Ashwini Chaudhary's answer :

#!/usr/bin/env python
import re

commands = "copy move".split()
input_string  = "something move 11 something move 12 something 13 copy 14 15"
tokens = iter(re.split("(%s)" % "|".join(map(re.escape, commands)), input_string))
result = []
for tok in tokens:
     if tok in commands:
        args = re.findall(r"\d+", next(tokens, ""))
        result.append((tok,) + tuple(args) + ("",)*(2 - len(args)))
print(result)

Output

[('move', '11', ''), ('move', '12', '13'), ('copy', '14', '15')]

要将每个命令限制为两个参数,只需使用切片:tuple(arg[:2])

关于python - 使用正则表达式和 python 解析命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14489010/

相关文章:

json - 解析 JSON 卡住 tableView SWIFT

python - OpenCV 使用蒙版图像去除背景

python - matplotlib 修改 colormap 以白色为零

python - ids 对象的 Django DRF 列表

javascript - 正则表达式不在引号中时不匹配

Java正则表达式检查给定值的长度

javascript - 为什么 string.split() 结果包含 undefined?

java - 如何将 JSONObject 转换为带有字符串变量的 Java Bean?

Python 相当于 excel 嵌套 if 用于过滤 Pandas DataFrame 行的条件

python - 解析右结合运算符(指数)