这听起来像是一个愚蠢的问题,但是我与一些开发人员进行了长时间的交谈,这听起来像是一件有趣的事情。所以; 您的想法是什么-正则表达式看起来像什么,永远不会被任何字符串匹配!编辑:为什么我要这个?好吧,首先是因为我觉得思考这样的表达式很有趣,其次是因为我在脚本中需要它。在该脚本中,我将字典定义为Dictionary<string, Regex>。如您所见,它包含一个字符串和一个表达式。基于该字典,我创建了全部使用此字典作为其工作方式参考的方法,其中一种将正则表达式与已解析的日志文件进行匹配。如果一个表达式匹配,Dictionary<string, long>则为另一个表达式添加一个由表达式返回的值。因此,为了捕获字典中某个表达式不匹配的所有日志消息,我创建了一个名为“未知”的新组。向该组添加了其他所有不匹配的内容。但是,为了防止日志消息的“未知”表达式不匹配(偶然),我必须创建一个表达式,该表达式无论从我提供的字符串来看,都绝不会匹配。因此,您有理由提出这个“不是真正的问题” ...
3 回答
长风秋雁
TA贡献1757条经验 获得超7个赞
这实际上很简单,尽管它取决于实现/标志 *:
$a
将a在字符串末尾匹配一个字符。祝好运。
警告:
此表达式很昂贵-它会扫描整行,找到行尾锚,然后才找到a并返回负匹配。(有关更多详细信息,请参见下面的评论。)
*最初,我对多行模式正则表达式没有多加考虑,因为它$也与行尾匹配。实际上,它将与换行符之前的空字符串匹配,因此,像这样的普通字符a永远不会出现在之后$。
慕婉清6462132
TA贡献1804条经验 获得超2个赞
杠杆作用negative lookahead:
>>> import re
>>> x=r'(?!x)x'
>>> r=re.compile(x)
>>> r.match('')
>>> r.match('x')
>>> r.match('y')
此RE在术语上是矛盾的,因此永远不会匹配任何内容。
注意:
在Python中,re.match()会\A在正则表达式的开头隐式添加字符串的开始锚点()。此锚对于性能很重要:如果没有锚,将扫描整个字符串。那些不使用Python的用户将希望显式添加锚点:
\A(?!x)x
慕盖茨4494581
TA贡献1850条经验 获得超11个赞
环视四周:
(?=a)b
对于正则表达式新手:正面看(?=a)要确保下一个字符为a,但不更改搜索位置(或在匹配的字符串中包含“ a”)。现在,确认下一个字符为a,b仅当下一个字符为时,regex()的其余部分才匹配b。因此,此正则表达式匹配只有一个字符既a与b在同一时间。
- 3 回答
- 0 关注
- 654 浏览
添加回答
举报
0/150
提交
取消