2015-05-17 112 views
1

使用正则表达式我想抓取-之前的所有文本。我下面的正则表达式可以成功抓取我想要的文本,但它也抓住了连字符。我怎样才能阻止呢?抓住除连字符之外的所有东西

/(.*) - 

对于“abc-def”它返回“abc - ”,但我试图获得“abc”。我正在Python中执行这个正则表达式。

+0

打印分组序号1或使用 –

+1

只是参考第一组指标只得到捕获结果。你在用什么**语言? – hwnd

回答

2

你的正则表达式是正确的,你只需要打印组索引1.但它会打印abc而不是abc<space>

如果你想匹配连字符前没有连字符的字符,那么你可以使用积极lookahead。

.*?(?=-) 

在蟒蛇,

>>> import re 
>>> re.match(r'(.*)-', "abc - def").group(1) 
'abc ' 
>>> re.match(r'.*(?=-)', "abc - def").group() 
'abc ' 
+0

为什么预见甚至是必要的? – hwnd

3

我执行这个表达式在Python。

正如我的评论上面所述,引用组索引来获取匹配结果。

>>> re.match('(.*)-', 'abc - def').group(1) 
'abc ' 

但是,我认为没有必要真正使用正则表达式在这里:

>>> 'abc - def'.split('-')[0] 
'abc ' 
0

所有你想要做的就是抓住一切上升到第 - 并将其存储到一个组。根据你正在使用的正则表达式(Perl风格或其他)

你会做类似于你有什么,但我会懒惰寻找的第一场比赛 - 并将它之前的一切。

也就是说: - 将返回(*):“ABC - ” 但这将包含组“ABC”和一组整个事情的“ABC - ” 你只是想没有 - 可以通过您的语言的组修饰符访问它。

https://regex101.com/r/cH6gO8/1

对于Python:

>>> re.match('(.*?)-', 'abc - cba').group(1) 


In [1]: mystring = "abc - cba"                                     

In [2]: import re                                        

In [3]: re.match(r'(.*?)-', mystring).group(1)                                 
Out[3]: 'abc ' 
0

剔除连字符为你不工作?

([^\-]) -*

相关问题