使用正则表达式我想抓取-
之前的所有文本。我下面的正则表达式可以成功抓取我想要的文本,但它也抓住了连字符。我怎样才能阻止呢?抓住除连字符之外的所有东西
/(.*) -
对于“abc-def”它返回“abc - ”,但我试图获得“abc”。我正在Python中执行这个正则表达式。
使用正则表达式我想抓取-
之前的所有文本。我下面的正则表达式可以成功抓取我想要的文本,但它也抓住了连字符。我怎样才能阻止呢?抓住除连字符之外的所有东西
/(.*) -
对于“abc-def”它返回“abc - ”,但我试图获得“abc”。我正在Python中执行这个正则表达式。
你的正则表达式是正确的,你只需要打印组索引1.但它会打印abc
而不是abc<space>
。
如果你想匹配连字符前没有连字符的字符,那么你可以使用积极lookahead。
.*?(?=-)
在蟒蛇,
>>> import re
>>> re.match(r'(.*)-', "abc - def").group(1)
'abc '
>>> re.match(r'.*(?=-)', "abc - def").group()
'abc '
为什么预见甚至是必要的? – hwnd
我执行这个表达式在Python。
正如我的评论上面所述,引用组索引来获取匹配结果。
>>> re.match('(.*)-', 'abc - def').group(1)
'abc '
但是,我认为没有必要真正使用正则表达式在这里:
>>> 'abc - def'.split('-')[0]
'abc '
所有你想要做的就是抓住一切上升到第 - 并将其存储到一个组。根据你正在使用的正则表达式(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 '
剔除连字符为你不工作?
([^\-]) -*
打印分组序号1或使用 –
只是参考第一组指标只得到捕获结果。你在用什么**语言? – hwnd