python-3.x - Python3:重新匹配命令列表中的命令,单行由 a 分隔;
问题描述
我正在尝试解析命令行,在命令之前或之后使用 0 个或多个命令。
这<name>
也是该行的一部分。
例子:
cmd = 'lsg <name>; cd <name>;find . -type f -exec grep -i <name> {} \; -print;lsg ; ps axwwl '
pattern = r'.*(find.*-exec.*\\;?.*?;?)(;*.*$)'
match = re.match(pattern, cmd)
我得到的是:
find . -type f -exec grep -i <name> {} \;
我想做的只是匹配find
命令,即:
find . -type f -exec grep -i <name> {} \; -print
任何帮助将不胜感激。
解决方案
您可以使用
match = re.search(r'\bfind\s.*-exec\s.*\\;?[^;]*', cmd)
if match:
print(match.group())
请参阅正则表达式演示。详情:
\bfind
- 一个前面find
没有字母/数字/的单词,_
然后\s
- 一个空格.*
- 除换行符之外的零个或多个字符,尽可能多-exec
- 一个-exec
字符串\s.*
- 一个空格,然后是除换行符之外的零个或多个字符,尽可能多\\
- 一个\
字符;?
- 一个可选;
字符[^;]*
- 除 . 之外的零个或多个字符;
。
查看Python 演示:
import re
rx = r"\bfind\s.*-exec\s.*\\;?[^;]*"
text = r"lsg <name>; cd <name>;find . -type f -exec grep -i <name> {} \; -print;lsg ; ps axwwl "
match = re.search(rx, text)
if match:
print (match.group())
# => find . -type f -exec grep -i <name> {} \; -print
推荐阅读
- javascript - 无法使用变量 - 我想我只是再次分配变量?
- python - 是否有一个观察者和一个事件处理程序来响应 python 中的文件修改?
- python - 你可以在 PyInstaller 可执行文件中使用 pip 吗?
- appian - 找不到 Appian 管理控制台
- postgresql - 是否有确保不存在 postgres 函数的 ansible 声明?
- c# - 无法验证防伪令牌
- mysql - MYSQL:在连接中找到时选择值,否则为占位符
- networking - Terraform GCP 创建网络失败。错误 400
- r - R将股票价格合并到多个csv文件-使用标题作为股票代码
- django - 产品图片 - “无法将模式 RGBA 写入 JPEG”