正则表达式在括号内获取单词

时间:2014-08-24 11:47:25

标签: python regex

我有正则表达式,它在括号之间打印,事实上我只需要特定的括号,我的意思是

car(skoda,audi)
bike(hayabusa)

我输出为: 斯柯达 奥迪 隼

为了在括号中找到汽车和自行车,我使用了:(r'^(\S+)\((.*)\)$')

但是我需要专门为'car(...)'开车,该怎么做?

我尝试过类似:(r'^car(\S+)\((.*)\)$')

的内容

我只需要skoda,audi而不是hayabusa

我没有得到输出

编码使用:

class Group:
    def __init__(self):
        self.members = []
        self.text = []

with open('text1.txt') as f:
    groups = collections.defaultdict(Group)
    group_pattern = re.compile(r'^(\S+)\((.*)\)$')  #<=here i am using
    current_group = None

    for line in f:
        line = line.strip()
        m = group_pattern.match(line)
        if m:    # this is a group definition line
            group_name, group_members = m.groups()
            groups[group_name].members.extend(group_members.split(','))
            current_group = group_name
        else:
            if (current_group is not None) and (len(line) > 0):
                groups[current_group].text.append(line)

for group_name, group in groups.items():
    print "%s(%s)" % (group_name, ','.join(group.members))
    print '\n'.join(group.text)

2 个答案:

答案 0 :(得分:0)

您可以尝试使用Positive Lookbehind & Lookahead

  

环视实际匹配字符,但随后放弃匹配,仅返回结果:匹配或不匹配。

(?<=^car\().*(?=\)$)

online demo

使用findall

从索引1获取匹配的组
^car\((.*)\)$

online demo


示例代码:

import re
p = re.compile(ur'(?<=^car\().*(?=\)$)')
test_str = u"car(skoda,audi)"

re.findall(p, test_str)

答案 1 :(得分:0)

您的代码有什么问题?

^car(\S+)\((.*)\)$

您的代码与预期字符串匹配的原因是,

  • 您需要将(\S+)更改为(\S*),因为\S+会进行贪婪匹配。这与最后一次匹配。所以不会发生捕获。

最后你的正则表达式是,

^car(\S*)\((.*)\)$

获取组索引2中存在的字符串。

>>> import re
>>> s = """car(skoda,audi)
... bike(hayabusa)"""
>>> regex = re.compile(r'^car\S*\((.*)\)$', re.M)
>>> m = regex.findall(s)
>>> m
['skoda,audi']