首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么一个空字符串在我的正则表达式中显示为find?

为什么一个空字符串在我的正则表达式中显示为find?
EN

Stack Overflow用户
提问于 2021-06-23 22:05:04
回答 1查看 46关注 0票数 0

最近,我一直在学习正则表达式(如果你想知道我有多熟练),在我参加的一个在线Python课程中,称我为初学者会很慷慨。我一直在使用一个有用的在线模拟器来帮助调试我的正则表达式过滤器,我遇到了一个问题。我的目标是过滤文本文件中的用户名。

文件中的几行代码:

代码语言:javascript
复制
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

我所尝试过的准则:

代码语言:javascript
复制
([a-z]{1,}\d{1,})?(\-)?(?=(\s\[))

然而,我的过滤器发现了一些额外的东西,请参阅这里这里

下面是我对正则表达式的思考过程:

  • 我想要字符串‘]’(包括空格)前面的东西。
  • 那个东西必须是abcd.1234.(一行小写字母跟一行数字)的用户名当且仅当那是存在的(因此'?')
  • 另一种可能是,如果没有用户名,在“]”前面可能是一个破折号-“(第二个屏幕截图),这是过滤器应该找到的当且仅当有一个破折号。
  • 在任何情况下,都有一个有效的用户名或一个破折号(在正确的位置)。

我不认为这是关于正确或具体的过滤,只是过滤除了我想要过滤的内容之外,还会产生一个空字符串。我的意思是,匹配1是它应该是什么,但匹配2只是一个空字符串(字面上的字符27-27)就在比赛1的最后一点(第一个屏幕截图)。我想让这一切消失--目前,“比赛”的数量是应该有的两倍。我很难自己找出原因。希望这张截图能解释我不能说清楚的一切。

EN

回答 1

Stack Overflow用户

发布于 2021-06-23 22:27:46

尝试使用或|来表示它必须是用户名或破折号。

([a-z]{1,}\d{1,}|\-)(?=(\s\[))

因为两个组后面都有一个?,所以它也不能匹配任何东西。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68107507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档