Python正则表达式特定单词,单引号结尾

问题描述 投票:0回答:2

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

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

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

一个例子是:Epresley01'J98473'

python regex string alphanumeric
2个回答
1
投票

简要

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

  1. ^'断言该行开头的位置,并确保'是该行的第一个字符。
  2. $断言该行末尾的位置。

说过你指定它前面有一个空格字符(在你的模式中不存在)。您的模式还会检查',它不是用户名的第一个字符。鉴于您实际上没有给我们提供您的文件样本,我无法确认或否认您的字符串在用户名之前开始并在其之后结束,但如果不是这样,主播^$也没有帮助您。

Requirements

以下要求只是从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匹配任何非单词字符。因为这是一个双重否定,就像说 别 比赛 非 字符。将_添加到集合中会使其无效。
  • '字面意思匹配撇号字符'

0
投票

我想你可以这样做:

(在@ctwheels评论后更新)

See regex in use here

 [A-Z][a-zA-Z0-9]{1,10}'

说明

  • 匹配空白
  • 匹配大写字符[A-Z]
  • 匹配[a-zA-Z0-9]+
  • 匹配撇号'

Demo

© www.soinside.com 2019 - 2024. All rights reserved.