首页 > 解决方案 > 正则表达式查找某些模式之间的所有字符串

问题描述

我的输入字符串可以是以下行之一:

Active App: Coffee (priority 34)

Active App: Hot Bread (priority 20)

Active App: Hot Baked Bread (priority 1)

etc...

在这种情况下Coffee,它可以是任何字符串 [a-zA-Z](一个或多个单词),而不是 " "。

在“ (priority 34)”中,只有整数会改变。

那么如何从这一行得到“ Coffee”/“ Hot Bread”/“ ”呢?Hot Baked Bread

我无法正确处理单词之间的空格。

标签: pythonregex

解决方案


这是一个使用 python 正则表达式的简单解决方案match()

它忽略您要捕获的应用程序名称之后的字符串部分。但如果重要的话,可以添加。

它将捕获直到它看到一个(,然后从字符串中去除尾随的空白字符。

import re;

myStr = "Active App: Hot Baked Bread (priority 34)";
appStr = re.match("Active App: ([^\(]*)", myStr);
print(appStr.group(1).rstrip());

这是一个仅捕获实际“活动应用程序”名称的版本,之后无需修剪字符串。并在打印之前检查是否找到了匹配项:

import re;

myStr = "Active App: Coffee Some (priority 34)";
appStringMatch = re.match("Active App: (.*)\s\(", myStr);
if appStringMatch:
    print(appStringMatch.group(1));

推荐阅读