首页 > 解决方案 > 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

任何帮助将不胜感激。

标签: python-3.xregexmatch

解决方案


您可以使用

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

推荐阅读