我有正则表达式,它在括号之间打印,事实上我只需要特定的括号,我的意思是
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)
答案 0 :(得分:0)
您可以尝试使用Positive Lookbehind & Lookahead
环视实际匹配字符,但随后放弃匹配,仅返回结果:匹配或不匹配。
(?<=^car\().*(?=\)$)
使用findall
^car\((.*)\)$
示例代码:
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']