使用python的re模块拆分字符串

时间:2016-07-20 06:58:54

标签: python regex string

我有一个字符串

profilePhoto

很好

我怀疑navigationDrawer中的任何角色是在该角色上分割字符串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' 并给我第一个切片。(因为&#34; cou&#34;它找到一个匹配的字符我:e (in)(like))。包含s中任何字符的任何字符串都会发生这种情况。

例如:n

因为它找到匹配的字符串作为&#39; e&#39;在(in)(like)之后。

所以我想要一些建议,当分裂发生/重要时,如何将(in)(like)视为单词而不是字符。

请建议一种语法。

3 个答案:

答案 0 :(得分:1)

回答你的问题,[(==)(>=)(<=)(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字母,请使用:< / p>

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())

答案 1 :(得分:1)

如果您只想要字符串的第一个单词,那么这应该可以完成这项任务:

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

答案 2 :(得分:1)

使用>>> 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' >>> 有什么问题吗?

{{1}}