我正在尝试编写正则表达式以选择下划线之间的所有字符。我以_([^_]+)_
结尾,但它与所有组都不匹配,
字符串:abc_bca_vag_hag_bag
输出:bca vag hag
有人可以帮忙吗?
答案 0 :(得分:4)
我使用了split函数,并选择除了第一个和最后一个元素之外的所有元素:
st = 'abc_bca_vag_hag_bag'
lis = st.split('_')[1:-1]
# output ['bca', 'vag', 'hag']
答案 1 :(得分:3)
您的正则表达式将匹配下划线,并且一旦匹配的内容将不再匹配。因此,在匹配_bca_
之后,看不到_bca_
中的最后一个下划线实际上与vag
之前的下划线相同。它认为vag
之前没有下划线,因为它已经与上一次匹配中的下划线匹配。
您需要使用 lookaheads 和 lookbehinds :
(?<=_)[^_]+(?=_)
这些将与下划线不匹配。他们只会“看”,看看是否有下划线。