抓住连字符以外的一切

时间:2015-05-17 03:45:10

标签: regex

使用正则表达式我想在-之前获取所有文本。我的下面的正则表达式可以成功获取我想要的文本,但它也抓住了连字符。我怎么能阻止这个?

/(.*) -

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

4 个答案:

答案 0 :(得分:3)

  

我在Python中执行此正则表达式。

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

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

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

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

答案 1 :(得分:2)

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

如果你想匹配连字符之前存在的字符而没有连字符,那么你可以使用正向前瞻。

.*?(?=-)

在python中,

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

答案 2 :(得分: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 '

答案 3 :(得分:0)

排除连字符对你不起作用?

([^\-]) -*