我有一个日志文件,用于记录 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.`
问题是有些计算机名有
-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/