python - 使用python的re模块分割字符串

标签 python regex string

我有一个字符串

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:e n)。对于包含 (in)(like) 中任何字符的任何字符串都会发生这种情况。

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

因为它在 p 之后找到了一个匹配的字符“e”。

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

请建议一种语法。

最佳答案

回答您的问题,[(==)(>=)(<=)(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())

关于python - 使用python的re模块分割字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38474353/

相关文章:

java - 字符串键混合大写会覆盖 Hashmap 中的条目

python - 如何替换 Pandas 数据框列中的口音

python - pandas to_sql() 给出了 SADeprecationWarning

python - 是否有一个python库,可让我组合在一起并从自定义波形列表中导出mp3文件?

ios - 如何使用正则表达式查找以三个字符前缀开头的单词

c# - 获取花括号之间的值c#

c++ - C++:段错误(核心已转储)

python - 与多个经纪人一起开始 celery worker

php - 在 PHP 中,如何从文本 block 中提取多个电子邮件地址并将它们放入数组中?

java - 关于方法重载的澄清