Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python re.search进行区分大小写的匹配_Python_Regex - Fatal编程技术网

使用python re.search进行区分大小写的匹配

使用python re.search进行区分大小写的匹配,python,regex,Python,Regex,我想从文本中进行区分大小写的匹配。在下面的例子中,我尝试使用re.search匹配“Ca.iNy”,我想匹配“C”应该是大写的位置,其余所有字符可能都在任何一种情况下。如果它与大小写匹配,我希望为变量设置一个值 我已经采取了帮助形式,并通过检查第一个字母是否为大写字母来实现,并且在一次检查中效果良好 s = "The details belong to (Ca.iNy.) in this case" reg = re.compile("Ca.iny.", re.I) reg.search(s).

我想从文本中进行区分大小写的匹配。在下面的例子中,我尝试使用re.search匹配“Ca.iNy”,我想匹配“C”应该是大写的位置,其余所有字符可能都在任何一种情况下。如果它与大小写匹配,我希望为变量设置一个值

我已经采取了帮助形式,并通过检查第一个字母是否为大写字母来实现,并且在一次检查中效果良好

s = "The details belong to (Ca.iNy.) in this case"
reg = re.compile("Ca.iny.", re.I)
reg.search(s).group().startswith("C").
但是,我无法在“if-else循环”中使用它。我尝试了下面的代码,但搜索似乎不区分大小写。谁能告诉我吗

import re

st = "The details belong to (Ca.iNy.) in this case"
Mval = ''

if re.search(r"C(?i)a.iny", st):
    Mval = "AAAAA"
elif re.search(r"(?i)Ky.", st):
    Mval = "BBBBB"
elif re.search(r"(?i)M.sa.", st):
    Mval = "CCCCC"
else:
    Mval = "DDDDD"

print Mval
import re

st = "The details belong to (Ca.iNy.) in this case"
Mval = ''

if re.search(r"C""(?i)a.iny", st):
    Mval = "AAAAA"
elif re.search(r"(?i)Ky.", st):
    Mval = "BBBBB"
elif re.search(r"(?i)M.sa.", st):
    Mval = "CCCCC"
else:
    Mval = "DDDDD"

print Mval
结果

  Ca.imo           OK      
  Ca.IMo           OK      
  Ca.iMo           OK      
  CL.icv           OK      
  cl.icv      - bad match -
  cL.icv      - bad match -
  ca.ghc      - bad match -
  Rl.axp           OK      
  Rl.AXp           OK      
  nm.fgt      - bad match -

可能与@Wooble重复。答案只涉及一个案例。但这里的问题是在实现if-else循环的过程中。因为if需要使用if else匹配大约50个案例。如果我一开始编译所有的模式,那就不好了。@Wooble你能从复制中取消标记吗。所以你们中的任何一个人都可以帮助我实现这一点?如果你们加入一些文本,这个答案会更有用。试着解释一下你是怎么解决这个问题的,以及为什么。@jeff,我没有理解你。你能告诉我我需要在代码中的什么地方进行更改吗?@BryanOakley你能帮我实现这个吗?如果你加入一些文本,这个答案会更有用。试着解释一下你是如何解决这个问题的,以及为什么。很抱歉,没有评论的那篇文章是一篇偶然的文章。为了可读性,这篇文章只放了[a-z].[a-z][a-z]而不是r“C”(?i)a.iny“,st),并且为了使下面的字母小写,它是原始的,但是,搜索到最后的另一个。@ USE2112190,但是考虑一个情况,如果它匹配“Ca.iRo”,我需要设置MVAL为“DDDDD”,如果匹配“Ca.IPl Vn .LP”。我需要将Mval设置为“FFFFF”,我需要将这些条件保持在50左右。是否可以将预期的组划分为分类?例如,一些组有6个字符长,一些组有“.”分隔符"? 这将有助于你不需要一长串的if/else语句。首先感谢你的回答和帮助。我希望很难有一个预期的群体分类。好吧,假设你能够,我会上传一个可能有用的答案,旁边的评论应该会有帮助,并且作为一个注释,哪些案例是针对案例敏感度的,哪些不是我想这应该有效。如果我需要进一步的帮助,我会告诉你的。再次感谢你的回答。
import re
All = {"CA.ing": 3, "cA.aec": 10}
st = "The details belong to (Ca.inY.) in this case"
Mval = ''
class1 = r"[a-z][a-z].[a-z][a-z][a-z]"
class2 = r"[a-z][a-z][a-z][a-z][a-z][a-z]"  # For strings like alaska

if re.search(class1, st, flags=re.IGNORECASE):
    found_value = re.search(class1, flags=re.IGNORECASE).group()
    if found_value in All.keys():
        Mval = All[found_value]
elif re.search(class2, st):
    found_value = re.search(class2, st).group()
    if found_value in All.keys():
        Mval = All[found_value]

#This will return a KeyError if a string is present not in your dictionary
#Note : You can take care of the different case sensitive cases in the dictionary, by
# only including the proper cases
[mport re

reg = re.compile('([a-z]{2})\.[a-z]{3}',re.I)

def code(X,r):
    for ma in r.finditer(X):
        if ma.group(1)[0].upper()==ma.group(1)[0]:
            GV = 'OK'
        else:
            GV = '- bad match -'
        yield '  {!s:10}  {!s:^13}'.format(ma.group(), GV)

data = ('Ca.imo  Ca.IMo gggg Ca.iMo   CL.icv   cl.icv  cL.icv'
        'hhhh  ca.ghc  Rl.axp  bbb  Rl.AXp  nm.fgt')

print '\n'.join(res for res in code(data,reg))
  Ca.imo           OK      
  Ca.IMo           OK      
  Ca.iMo           OK      
  CL.icv           OK      
  cl.icv      - bad match -
  cL.icv      - bad match -
  ca.ghc      - bad match -
  Rl.axp           OK      
  Rl.AXp           OK      
  nm.fgt      - bad match -