我有一个字符串
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)视为单词而不是字符。
请建议一种语法。
答案 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.match
和r'\w+'
或r'[a-z]+(?:_[A-Z]+)+'
等等。)
如果您的值位于字符串的开头并以小写ASCII字母开头,然后可以包含任意数量的_
序列,后跟大写ASCII字母,请使用:< / p>
re.match(r'[a-z]+(?:_[A-Z]+)*', s)
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}}