我试图找到一个正则表达式,它可以像\w+
那样拆分文本,但是跳过两个星号之间的任何内容。在
我可以用以下内容识别标记的内容:(?<=\*)(.*)(?=\*)
。在
我试过使用这样的否定的前瞻/后向语句:(?<!\*)([\w]+)(?!\*)
,但这会匹配每个单词,包括星号之间的单词,除了星号前后的第一个字符(例如,“河流*运行缓慢*但肯定”将匹配The
,river
,uns
,slowl
,but
,surely
,而期望的匹配只有The
、river
、but
和{
我还尝试用一个非捕获组来包围原始表达式:(?:\*(.*?)\*)
,我希望它不会从我的测试字符串中返回任何内容,但奇怪的是,它在没有捕获的情况下返回了它所做的事情。在
任何帮助都将不胜感激。我整个上午都在读这方面的文章,在这一点上我并没有少感到困惑。我浏览了这里的[regex]标签,在google上搜索过,读过正则表达式,但无法组合出符合我需要的表达式。在
正则表达式可能不是这项工作的正确工具。这与匹配圆括号/方括号/大括号的问题非常相似(随便你怎么称呼它)。其原因是,鉴于文本:
正则表达式
^{pr2}$将返回星号之间的文本。但是,它将返回:
我怀疑您实际上并不希望返回
and some more then
,但是正则表达式引擎无法识别第二个*
是一个“结束”星号。在传统上处理这类事情的算法包括使用堆栈来跟踪嵌套,以及您是在一组括号内还是在外(或者在您的例子中是星号)。在
您可以匹配不需要的内容,匹配并捕获您需要的内容:
参见regex demo。与
re.findall
一起使用,如果在regex模式中定义了捕获组,则只返回捕获的子字符串。在详细信息
\*[^*]*\*
-a*
,然后是a*
以外的任何0+字符,然后是*
|
-或(\w+)
-捕获组1:一个或多个单词字符(字母、数字、下划线)。要只匹配字母,请使用([^\W\d_]+)
。在请参见Python demo:
^{pr2}$相关问题 更多 >
编程相关推荐