正则表达式:选择下划线之间的所有字符

3
我正在尝试编写一个正则表达式,以选择下划线之间的所有字符。 我最终得到了_([^_]+)_,但它无法匹配所有组。
字符串:abc_bca_vag_hag_bag 输出:bca vag hag 有人能帮忙吗?

2
你希望用Java还是Python来回答问题,还是两种语言都可以? - Sweeper
2个回答

4
我使用了split函数,并选择了除第一个和最后一个元素以外的所有元素:
st = 'abc_bca_vag_hag_bag'
lis = st.split('_')[1:-1]
# output  ['bca', 'vag', 'hag']

3
您的正则表达式将匹配下划线,并且只匹配一次的内容不会再次匹配。因此,在匹配“_bca_”后,它并没有意识到“_bca_”中的最后一个下划线实际上是在“vag”之前的同一个下划线。它认为“vag”没有前置下划线,因为它已经在先前的匹配中匹配了它前面的下划线。
您需要使用“lookaheads”和“lookbehinds”:
(?<=_)[^_]+(?=_)

这些不会匹配下划线,它们只会"查看"是否存在下划线。

演示


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接