最近,我一直在学习正则表达式(如果你想知道我有多熟练),在我参加的一个在线Python课程中,称我为初学者会很慷慨。我一直在使用一个有用的在线模拟器来帮助调试我的正则表达式过滤器,我遇到了一个问题。我的目标是过滤文本文件中的用户名。
文件中的几行代码:
76.72.133.93 - carroll1056 [21/Jun/2019:15:46:05 -0700] "POST /morph/optimize/plug-and-play HTTP/2.0" 400 27172
73.162.151.229 - dubuque3528 [21/Jun/2019:15:46:08 -0700] "DELETE /transition/holistic/e-business HTTP/2.0" 301 13923
13.112.8.86 - rau5626 [21/Jun/2019:15:46:09 -0700] "HEAD /ubiquitous/transparent HTTP/1.1" 200 16928
159.253.153.40 - - [21/Jun/2019:15:46:10 -0700] "POST le-business HTTP/1.0" 504 19845
136.195.158.6 - feeney9464 [21/Jun/2019:15:46:11 -0700] "HEAD /opensource/markets HTTP/2.0" 264 21149
219.194.113.255 - - [21/Jun/2019:15:46:12 -0700] "PATCH /nextgeneration/niches/mindshare HTTP/1.0" 503 20246我所尝试过的准则:
([a-z]{1,}\d{1,})?(\-)?(?=(\s\[))下面是我对正则表达式的思考过程:
我不认为这是关于正确或具体的过滤,只是过滤除了我想要过滤的内容之外,还会产生一个空字符串。我的意思是,匹配1是它应该是什么,但匹配2只是一个空字符串(字面上的字符27-27)就在比赛1的最后一点(第一个屏幕截图)。我想让这一切消失--目前,“比赛”的数量是应该有的两倍。我很难自己找出原因。希望这张截图能解释我不能说清楚的一切。
发布于 2021-06-23 22:27:46
尝试使用或|来表示它必须是用户名或破折号。
([a-z]{1,}\d{1,}|\-)(?=(\s\[))
因为两个组后面都有一个?,所以它也不能匹配任何东西。
https://stackoverflow.com/questions/68107507
复制相似问题