regex - 用于匹配字符串的特定子字符串的正则表达式

标签 regex python-3.x

我有一个日志文件,用于记录 LAN 中计算机的连接中断。我想从日志文件的每一行中提取每台计算机的名称,为此我这样做:(?<=Name:)\w+|(-PC)
目标文本:

 `[C417] ComputerName:KCUTSHALL-PC UserID:GO kcutshall Station 9900 (locked) LanId: | (11/23 10:54:09 - 11/23 10:54:44) | Average limit (300) exceeded while pinging www.google.com [74.125.224.147] 8x

[C445] ComputerName:FRONTOFFICE UserID:YB Yenae Ball Station 7C  LanId: | (11/23 17:02:00) | Client is connected to agent.`

enter image description here

问题是有些计算机名有-PC在他们和一些不是。我创建的表达式匹配没有 -PC 的计算机在他们的名字中,但如果一台计算机有 -PC在名称中,它将其视为单独的匹配项,我不想要那样。简而言之,它给了我 3 个匹配项,但我只想要 2 个。这就是我需要帮助的原因,我是正则表达式的初学者。

最佳答案

您可以使用

(?<=Name:)\w+(?:-PC)?

详情
  • (?<=Name:) - 紧跟在 Name: 之前的地方
  • \w+ - 1+字字符
  • (?:-PC)? - 一个可选的非捕获组,匹配 1 或 0 次 -PC子串。

  • 如果您需要匹配 PC,请考虑使用单词边界总而言之,
    (?<=Name:)\w+(?:-PC\b)?
    

    regex demo .

    关于regex - 用于匹配字符串的特定子字符串的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60080428/

    相关文章:

    python - for 循环 & if 在字典中

    python - 具有复杂结构的数据类实例的完整副本

    python - 在提交对象之前从 SqlAlchemy 获取主键

    python - 按需执行存储在变量中的类函数

    python - 如何将非 ASCII 字符编码的文件重命名为 ASCII

    MySQL:如何检查一个单词在字符串中是否出现多次

    php - PHP 中的并行处理

    java - 正则表达式忽略空格

    javascript - 简单的正则表达式 : how do I say: "it' s okay to have an "s " or "es " or "' s "at the end of the word, match those too."?

    java - 如何对包含 'zero or one' 的 '.*' 组进行正则表达式