仅在第一次出现分隔符时拆分字符串

时间:2017-12-21 07:36:50

标签: python regex string

我使用的POS标记器处理以下字符串

3+2

如下图所示。

3/num++/sign+2/num

我想使用python将此结果拆分如下。

['3/num', '+/sign', '2/num']         

我该怎么做?

3 个答案:

答案 0 :(得分:6)

使用re.split -

>>> import re
>>> re.split(r'(?<!\+)\+', '3/num++/sign+2/num')
['3/num', '+/sign', '2/num']

正则表达式模式将在+符号上分割,只要其前没有其他+

(?<!   # negative lookbehind
\+     # plus sign
)     
\+     # plus sign

请注意,lookbehinds(通常)不支持不同的长度模式。

答案 1 :(得分:1)

我认为棘手的部分是双+符号。您可以用特殊字符替换标志并完成它。

这应该有效,

st = '3/num++/sign+2/num'

st = st.replace('++', '@$')
st = st.replace('+', '@')
st = st.replace('$', '+')

print (st.split('@'))

这样做的一个问题是,您的原始字符串不能包含这些特殊字符@&amp; $。所以你需要为你的用例仔细选择它们。

修改:这个答案很天真。正则表达式更好 也就是说,正如COLDSPEED所指出的那样,你应该使用以下正则表达方法,使用lookbehind,

import re
print re.split(r'(?<!\+)\+', '3/num++/sign+2/num')

答案 2 :(得分:0)

虽然要求使用正则表达式,但这里有一个关于如何使用标准.split()执行此操作的示例:

my_string = '3/num++/sign+2/num'

my_list = []
result = []

# enumerate over the split string
for e in my_string.split('/'):
    if '+' in e:
        if '++' in e:
            #split element on double + and add in + as well 
            my_list.append(e.split('++')[0])
            my_list.append('+')
        else:
            #split element on single +
            my_list.extend(e.split('+'))
    else:
        #add element
        my_list.append(e)

# at this point my_list contains
# ['3', 'num', '+', 'sign', '2', 'num']

# enumerate on the list, steps of 2
for i in range(0, len(my_list), 2):
    #add result 
    result.append(my_list[i] + '/' + my_list[i+1])

print('result', result)

# result returns
# ['3/num', '+/sign', '2/num']