当前位置: 首页 > 面试题库 >

在python regex中将1个单词限制为区分大小写,其他限制为不区分大小写 (管)

陈松
2023-03-14
问题内容

|在regex,Python中有了(管道特殊字符)的含义。它匹配第一个或第二个。

ex:a|b 匹配a或b。

我的问题: 如果我想比赛有什么a用大小写敏感的,b在上面的例子中不区分大小写?

例如:

s = "Welcome to PuNe, Maharashtra"

result1 = re.search("punnee|MaHaRaShTrA",s)
result2 = re.search("pune|maharashtra",s)
result3 = re.search("PuNe|MaHaRaShTrA",s)
result4 = re.search("P|MaHaRaShTrA",s)

我想按照上述声明(s即)的方式搜索Pune
PuNe。但是我必须忽略大小写来搜索马哈拉施特拉邦。如何搜索区分大小写的1个单词和不区分大小写的另一个单词?这样,result1result2result3result4将给予not null价值。

我想

result1 = re.search("pune|MaHaRaShTrA",s1, re.IGNORECASE)

但这忽略了两个词的情况。

如何限制一个单词区分大小写而另一个不区分大小写?


问题答案:

在Python 3.6及更高版本中,您可以使用内联修饰符组:

>>> s = "Welcome to PuNe, Maharashtra"
>>> print(re.findall(r"PuNe|(?i:MaHaRaShTrA)",s))
['PuNe', 'Maharashtra']

请参阅相关的Pythonre文档:

(?aiLmsux-imsx:...)

(零或从所述一组多个字母'a''i''L''m''s''u''x',任选接着进行'-'随后从一个或多个字母'i''m''s''x'。)中的字母设置或移除对应的标志:re.A(只有ASCII匹配),
re.I(忽略大小写),re.L(取决于语言环境),re.M(多行),re.S(所有点都匹配),re.U(Unicode匹配)和re.X(详细)。(这些标志在模块内容中描述。)

这些信件'a''L''u'为内联标志使用时,所以他们不能合并或者按照相互排斥'-'。而是,当其中一个出现在内联组中时,它将覆盖封闭组中的匹配模式。在Unicode模式中,(?a:...)切换到仅ASCII匹配,然后(?u:...)切换到Unicode匹配(默认)。在字节模式中,(?L:...)切换到取决于语言环境的匹配,并(?a:...)切换到仅ASCII匹配(默认)。此替代仅对狭窄的内联组有效,并且原始匹配模式在组外恢复。

_3.6版的新功能。

在3.7版中进行了更改:字母“ a”,“ L”和“ u”也可以在一个组中使用。_

不幸的是,re3.6之前的Python版本不支持这些组,也不支持交替启用和禁用内联修饰符。

如果可以使用PyPi
regex模块
,则可以使用以下(?i:...)结构:

import regex
s = "Welcome to PuNe, Maharashtra"
print(regex.findall(r"PuNe|(?i:MaHaRaShTrA)",s))

请参阅在线Python演示。



 类似资料:
  • 问题内容: 我正在尝试提出一个要求区分大小写的结果的请求。 例如在我的数据库中 该请求是 但我有3行作为结果,我只想要abcdef 我试图找到一个解决方案 但是我有这个错误: 未知归类:’Latin1_General_CS_AS’{“成功”:false,“错误”:“#1273-未知归类:’Latin1_General_CS_AS’”} 谢谢 问题答案: 感谢您的帮助,我找到了不是latin1 ut

  • 对于报告(0.1%的所有查询),我需要返回一个所有可能类别的列表,区分大小写! 考虑以下文件: 运行以下查询: 返回: 是否有方法返回区分大小写的类别(存储在文档中)?我对此查询结果中的感兴趣。 Elasticsearch论坛中的问题 谢谢,伊泰

  • 问题内容: 我有一个Lucene索引,该索引当前区分大小写。我想添加的 选项 有不区分大小写作为后备的。这意味着与案例匹配的结果将获得更大的权重,并且将首先出现。例如,如果结果数限制为10,并且有10个匹配项符合我的情况,那就足够了。如果仅找到7个结果,则可以从不区分大小写的搜索中再添加3个结果。 我的案子实际上更复杂,因为我有不同重量的物品。理想情况下,匹配“错误”的表壳会增加一些重量。不用说,

  • 问题内容: 我想按不区分名称的名称搜索用户表中的数据。 我收到一个错误: 意外令牌:% 。我应该在哪里放置“%”? 问题答案: 您可以使用concat运算符: 或使用命名参数: (使用Spring Boot 1.4.3测试)

  • 问题内容: 我有一个充满小写和大写数据的json。例如 : 而且我有类似的东西: 我想做的是搜索朋友,而不用看大写和小写。因此,基本上,当我在输入中键入“ John”,“ JOHN”或简单地输入“ john”时,它应该返回我的朋友John。 那么是否可以将不区分大小写的选项应用于过滤器? 问题答案: 将您在使用字符串的toLowerCase的适用范围内定义的函数名称传递给您。参见ngFilter。