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