使用正则表达式我想在-
之前获取所有文本。我的下面的正则表达式可以成功获取我想要的文本,但它也抓住了连字符。我怎么能阻止这个?
/(.*) -
对于" abc - def"它返回" abc - "但我试图得到" abc"。我在Python中执行这个正则表达式。
答案 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)
排除连字符对你不起作用?
([^\-]) -*