Python正则表达式具体单词与结尾的单引号

时间:2017-12-28 14:14:36

标签: python regex string alphanumeric

搜索大型系统日志仓库并需要获取特定字词以匹配特定条件。 我正在使用正则表达式来编译搜索这个单词。我已经阅读了关于正则表达式字符的python文档,我理解如何单独指定每个条件,但不知何故错过了如何为我的特定搜索连接在一起。这是我到目前为止但没有工作......

p = re.compile("^'[A-Z]\w+'$")  
match = re.search(p, syslogline, )

这个词是一个可以是alphanum的用户名,总是以大写字母开头(以空格开头),可以包含字符或nums,长度为3-12,以单引号结尾。

示例包括:Epresley01'J98473'

2 个答案:

答案 0 :(得分:1)

根据您的要求(也在下面说明),您的正则表达式不起作用,因为:

  1. ^'断言该行开头的位置,并确保'是该行的第一个字符。
  2. $断言该行末尾的位置。
  3. 已经说过你指定它前面有一个空格字符(你的模式中没有)。您的模式还会检查',它不是用户名的第一个字符。鉴于您实际上没有向我们提供您的文件样本,我无法确认或否认您的字符串在用户名之前开始并在其之后结束,但如果不是这样,锚点^$也没有帮助你在这里。

    要求

    以下要求仅从OP的问题(重写)中复制,以概述用户名格式。用户名:

    • 前面有空格字符。
    • 以大写字母开头。
    • 包含chars或nums。我在这里假设chars实际上是指字母,用户名中的所有字母(包括大写的起始字符)都是ASCII。
    • 长度为3-12个字符(不包括前面的空格和下面描述的结束字符)。
    • 以撇号字符'结尾。

    代码

    See regex in use here

    (?<= )[A-Z][^\W_]{2,11}'
    

    说明

    • (?<= )确保前面有空格字符
    • 的正面观察
    • [A-Z]匹配任何大写的ASCII字母
    • [^\W_]{2,11}匹配除下划线_以外的任何单词字符(相当于a-zA-Z0-9
      • 这看起来有点混乱,因为它实际上是一个双重否定。这是说匹配集合中没有的东西。 \W匹配任何非单词字符。因为它是双重否定,所以就像说匹配字符。在集合中添加_会使其无效。
    • '按字面意思匹配撇号字符'

答案 1 :(得分:0)

我认为你可以这样做:

(在@ctwheels评论后更新)

See regex in use here

pipeline {
  agent { docker 'maven:3.3.3' }
 stages {
   stage('build') {
     steps { sh 'mvn --version' }
   }
 }

<强>解释

  • 匹配空白 [A-Z][a-zA-Z0-9]{1,10}'
  • 匹配大写字母
  • 匹配[A-Z]
  • 匹配撇号[a-zA-Z0-9]+

Demo