在Python中查找字符串中的多个元素

时间:2018-11-23 08:29:01

标签: python

我的问题是我需要在一个字符串中找到多个元素。

例如,我得到了一个看起来像这样的字符串:

line = if ((var.equals("INPUT")) || (var.equals("OUTPUT"))

然后我得到这段代码来查找'(“'和'”)'

之间的所有内容
char1 = '("'
char2 = '")'


add = line[line.find(char1)+2 : line.find(char2)]
list.append(add)

当前结果是:

['INPUT']

但是我需要结果看起来像这样:

['INPUT','OUTPUT', ...]

在获得第一个匹配项之后,它停止搜索其他匹配项,但是我需要在该字符串中查找与此搜索匹配的所有内容。

我还需要将每个匹配项追加到列表中。

4 个答案:

答案 0 :(得分:5)

最简单的

>>> import re
>>> s = """line = if ((var.equals("INPUT")) || (var.equals("OUTPUT"))"""
>>> r = re.compile(r'\("(.*?)"\)')
>>> r.findall(s)
['INPUT', 'OUTPUT']

诀窍是使用.*?,它是非贪婪的*

答案 1 :(得分:1)

您应该研究regular expressions,因为它非常适合您要实现的目标。

让我们检查一个满足您要求的正则表达式:

import re
regex = re.compile(r'\("([^"]+)"\)')

它与字符串("匹配,然后捕获不是引号的任何内容,然后在末尾匹配")

findall配合使用,您将获得所有捕获的组:

In [1]: import re

In [2]: regex = re.compile(r'\("([^"]+)"\)')

In [3]: line = 'if ((var.equals("INPUT")) || (var.equals("OUTPUT"))'

In [4]: regex.findall(line)
Out[4]: ['INPUT', 'OUTPUT']

答案 2 :(得分:0)

如果您不想使用正则表达式,将会为您提供帮助。

line = 'if ((var.equals("INPUT")) || (var.equals("OUTPUT"))'
char1 = '("'
char2 = '")'


add = line[line.find(char1)+2 : line.find(char2)]
list.append(add)
line1=line[line.find(char2)+1:]
add = line1[line1.find(char1)+2 : line1.find(char2)]
list.append(add)
print(list)

只需在代码中添加这三行,就可以完成

答案 3 :(得分:0)

如果我理解您的意见是正确的,那么类似的事情对您有所帮助:

line = 'line = if ((var.equals("INPUT")) || (var.equals("OUTPUT"))'
items = []
start = 0
end = 0
c = 0;
while c < len(line):
    if line[c] == '(' and line[c + 1] == '"':
        start = c + 2
    if line[c] == '"' and line[c + 1] == ')':
        end = c
    if start and end:
        items.append(line[start:end])
        start = end = None
    c += 1

print(items)    # ['INPUT', 'OUTPUT']