【问题标题】:How do I match a .log but not .log* in regex or python?如何在正则表达式或 python 中匹配 .log 但不匹配 .log*?
【发布时间】:2014-03-24 17:21:10
【问题描述】:

我在使用正则表达式时遇到问题。

我有:

urls = re.findall(r'href=[\'"]?([^\'" >]+)', line)
print urls

这给了我:

['production_r1499.log']
['production_r1499.log-20140323']
['production_r1499.log-20140323.gz']

我只对 .log 文件感兴趣。如何让正则表达式只匹配这个?

或者。 有没有类似于这种方法的方法?

if str(urls).endswith('.log'):

很高兴并感谢您的建议!

【问题讨论】:

  • line 变量的值是多少?是html字符串吗?
  • 查看输入字符串会有所帮助
  • 没有看到输入很难说,但你有没有试过使用$,这是一个匹配字符串结尾的锚?
  • (?!['])[\w]+.(log)(?<![-']) 将匹配这些样本的日志文件部分。抓取一个字符串,后跟一个 ' 之前和 ' 或 - 之后的 .log。

标签: python regex string-matching


【解决方案1】:

试试这个。

urls = re.findall(r'href=[\'"]?([^\'" >]+\.log)', line)

严格来说,这应该锚定到 href 属性的末尾。如果您担心误报,可以在结束引号之前添加 [\'">] 之类的内容。

【讨论】:

【解决方案2】:

使用前瞻查看匹配中.log 之后是否有"'>space

urls = re.findall(r'href=[\'"]?([^\'" >]+\.log)(?=[\'"> ])', line)

【讨论】:

  • 前瞻不会添加任何内容,只是匹配结束分隔符。
  • @tripleee 如果我不提前看,那么正则表达式将选择x.log 以及x.log.201。但是 OP 只想选择 x.log 并忽略在 .log 之后有文本的其他人
  • 是的,但是如果您只想要捕获的表达式,a(b)(?:=c) 最好写成a(b)c。对c 使用前瞻只是晦涩难懂。
  • @tripleee 明白你的意思。是的,你是对的。大声笑,现在我开始思考为什么我使用前瞻:-/
  • 感谢您的回复!这行得通,但我也明白我可以不用前瞻。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多