Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正则表达式获取括号内的单词_Python_Regex - Fatal编程技术网

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

Python 正则表达式获取括号内的单词,python,regex,Python,Regex,我有一个正则表达式,它在括号之间打印,实际上我只需要特定的括号,我的意思是 car(skoda,audi) bike(hayabusa) 我得到的输出是: 斯柯达 奥迪 哈亚布萨 为了得到括号中的汽车和自行车,我使用了:(r'^(\S+)\(.*)$) 但我只需要在“car(…)”中获得汽车,具体来说,该怎么办 我尝试了类似于:(r'^car(\S+)\(.*)$) 我只需要斯柯达,奥迪,而不需要hayabusa 我得不到输出 要使用的编码: class Group: def __in

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

car(skoda,audi)
bike(hayabusa)
我得到的输出是: 斯柯达 奥迪 哈亚布萨

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

但我只需要在“car(…)”中获得汽车,具体来说,该怎么办

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

我只需要斯柯达,奥迪,而不需要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)
类组:
定义初始化(自):
self.members=[]
self.text=[]
将open('text1.txt')作为f:
groups=collections.defaultdict(组)
group_pattern=re.compile(r'^(\S+)\(.*)$)\0):
组[当前组].text.append(行)
对于组名称,在组中分组。项()
打印“%s(%s)”%(组名称,,。加入(组成员))
打印“\n”。加入(group.text)
您可以尝试使用

lookaround实际上匹配字符,但随后放弃匹配,只返回结果:匹配或不匹配


示例代码:

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

re.findall(p, test_str)
重新导入

p=re.compile(ur’(?你的代码怎么了

^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']

你想分别打印斯柯达和奥迪的字符串吗?@AvinashRaj我想OP需要在两个偏执狂之间打印,但只有特定的偏执狂才能回答,我在我的问题中发布了一个代码,我可以修改你的答案吗?当然,这很好,但在设置代码之前先尝试一下。只需使用上面的任何正则模式n匹配每一行。我试过了,效果很好,我能在上面的代码中也使用吗?对不起,我不知道pytton代码。代码是从测试站点复制的。只需要了解一点regex patten。你自己试试。Thnx,但是,我如何在代码中使用我的re.compile stmt。上面的代码将使用car()获得汽车这很好,但是当我使用上面的代码时,它会打印
(斯柯达,奥迪)
而不是
汽车(斯柯达,奥迪)
你想打印整个系列吗?不是这样,如果你看我上面的代码,即使有2辆以上的
汽车()
它也会加入并打印输出。例如,
汽车(斯柯达)
汽车(宝马,奔驰)
它输出为
汽车(斯柯达,宝马,奔驰)
但现在我只得到
(斯柯达,宝马,奔驰)
它离开了汽车。为什么不显式地添加字符串
汽车
,因为它将提供仅出现在以
汽车
开头的行上的字符串
^car(\S*)\((.*)\)$
>>> import re
>>> s = """car(skoda,audi)
... bike(hayabusa)"""
>>> regex = re.compile(r'^car\S*\((.*)\)$', re.M)
>>> m = regex.findall(s)
>>> m
['skoda,audi']