用python的re模块拆分字符串

2024-05-08 01:43:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一根绳子

s = 'count_EVENT_GENRE in [1,2,3,4,5]'
#I have to capture only the field 'count_EVENT_GENRE'
field = re.split(r'[(==)(>=)(<=)(in)(like)]', s)[0].strip()
#o/p is  'cou'
# for s = 'sum_EVENT_GENRE in [1,2,3,4,5]'  o/p = 'sum_EVENT_GENRE' 

这很好

我怀疑的是(in)(like)中的任何字符,它在该字符处分裂字符串s,并给我第一个片段(在“cou”之后,它会找到一个匹配的字符i:en)。任何包含(in)(like)中任何字符的字符串都会发生这种情况。你知道吗

例如:'percentage_AMOUNT' o/p = 'p'

因为它在p之后找到一个匹配的字符作为“e”。你知道吗

所以我想要一些建议,当分裂发生/发生时,如何把(in)(like)当作单词而不是字符。你知道吗

请建议一个语法。你知道吗


Tags: to字符串ineventfieldhavecount字符
3条回答

如果您只需要字符串的第一个单词,那么应该这样做:

import re
s = 'count_EVENT_GENRE in [1,2,3,4,5]'
field = re.split(r'\W', s)[0]
# count_EVENT_GENRE

使用split有什么问题吗?你知道吗

>>> s = 'count_EVENT_GENRE in [1,2,3,4,5]'
>>> s.split(' ')[0]
'count_EVENT_GENRE'
>>> s = 'coint_EVENT_GENRE = "ROMANCE"'
>>> s.split(' ')[0]
'coint_EVENT_GENRE'
>>>

回答您的问题,[(==)(>=)(<=)(in)(like)]是一个字符类,它匹配您在类中定义的单个字符。要匹配字符序列,需要删除[]并使用交替:

r'==?|>=?|<=?|\b(?:in|like)\b'

或更好:

r'[=><]=?|\b(?:in|like)\b'

code看起来像:

import re
ss = ['count_EVENT_GENRE in [1,2,3,4,5]','coint_EVENT_GENRE = "ROMANCE"']
for s in ss:
    field = re.split(r'[=><]=?|\b(?:in|like)\b', s)[0].strip()
    print(field)

但是,可能还有其他方法(更简单或更安全-取决于实际的规范)来获取所需内容(使用空格分割并获取第一项,使用re.matchr'\w+'r'[a-z]+(?:_[A-Z]+)+'等)

如果您的值位于字符串开头,以小写ASCII字母开头,然后可以有任意数量的_序列后跟大写ASCII字母,请使用:

re.match(r'[a-z]+(?:_[A-Z]+)*', s)

Full demo code

import re
ss = ['count_EVENT_GENRE in [1,2,3,4,5]','coint_EVENT_GENRE = "ROMANCE"']
for s in ss:
    fieldObj = re.match(r'[a-z]+(?:_[A-Z]+)*', s)
    if fieldObj:
        print(fieldObj.group())

相关问题 更多 >