如何使用正则表达式在字符串中查找单词的“片断”并在python中使用它?

时间:2018-10-27 19:13:22

标签: python regex

对于假期作业,在密码检查python程序中,我想使用 regexs 来查找名称(或名称的“一部分”,表示2)用户提供的密码中包含连续的字母)。

第1部分:正则表达式本身

假设用户名为 Samuel

  • 将匹配的密码:

    samuel
    sAm123
    123Sam
    lSAMUo
    sa
    
  • 不匹配的密码:

    s3m
    leumas
    sml
    s123
    

到目前为止,我仅成功完成了此不完整的正则表达式:

<link href="https://unpkg.com/quasar-extras@latest/material-icons/material-icons.css" rel="stylesheet"/>
<script src="https://unpkg.com/vue@latest/dist/vue.js"></script>
<link rel="stylesheet" type="text/css" href="https://unpkg.com/quasar-framework@latest/dist/umd/quasar.mat.min.css">
<script src="https://unpkg.com/quasar-framework@latest/dist/umd/quasar.mat.umd.min.js"></script>
<div id="app">
  <search :search-criteria="searchCriteria" @search-string="updatedSearchString"></search>
  <div v-for="(doc, index) in filteredDocuments" v-bind:key="index">
    <div>{{doc.filename}}</div>
  </div>
</div>

<template id="child-template">
  <div>
    <q-search v-model="search" placeholder="Search" />
  </div>
</template>

但是,如果密码中只有一个来自正则表达式的字母,并且不是连续的2个字母,它也会匹配。

如何增强正则表达式?

第2部分:python使用

当我使用[sS]?[aA]?[mM]?[uU]?[eE]?[lL]? 包中的search函数时,只有在字符串开始时,它才与我以前的正则表达式匹配。这是一个应该起作用的案例的示例代码:

re

我想念什么?

1 个答案:

答案 0 :(得分:0)

您可以尝试:

import re

pattern = r"(?i)sa|am|mu|ue|el"
for _string in ("samuel", "sAm123", "1235Sam", "lSAMUo", "sa"):
    assert re.search(pattern, _string) is not None

for _string in ("s3m", "leumas", "sml", "s123"):
    assert re.search(pattern, _string) is None

这里的主要目的是:

  • 使用re.search()而不是re.match(),就像documentation所说的那样:
      

    如果要在字符串中的任意位置找到匹配项,请改用search()(另请参阅search()vs. match())。

  • (?i)使正则表达式不区分大小写

在问题评论中建议使用成对字符的@sin积分