Python 正则表达式匹配斜杠之间的条目,但不匹配斜杠-包括空条目

Python 正则表达式匹配斜杠之间的条目,但不匹配斜杠-包括空条目,python,regex,Python,Regex,我正在尝试使用regexp来匹配以下文本中斜杠之间的条目: 311102Z/5663.00N/00813.02E/GPS//03/-/ 对于本例,结果应该是一系列具有以下内容的匹配: 311102Z 5663.00N 00813.02E 全球定位系统 空字符串 03 - 捕获空条目并返回空匹配项是很重要的。不幸的是,由于各种原因,我们不能在这里使用分组,也不能匹配斜杠本身并在这些斜杠上拆分 我有下面的正则表达式,它几乎可以工作:.*???=/。可以看到此正则表达式的交互式显示。它可以很好地匹配

我正在尝试使用regexp来匹配以下文本中斜杠之间的条目:

311102Z/5663.00N/00813.02E/GPS//03/-/
对于本例,结果应该是一系列具有以下内容的匹配:

311102Z 5663.00N 00813.02E 全球定位系统 空字符串 03 - 捕获空条目并返回空匹配项是很重要的。不幸的是,由于各种原因,我们不能在这里使用分组,也不能匹配斜杠本身并在这些斜杠上拆分

我有下面的正则表达式,它几乎可以工作:.*???=/。可以看到此正则表达式的交互式显示。它可以很好地匹配所有条目,但在每个条目的末尾有额外的空匹配项

我试图用A+替换**,但这当然意味着它与空白条目不匹配。 有没有人知道我能做些什么来让它匹配我想要的方式-即没有这些额外的空匹配,但是空条目位于斜杠之间没有字符的位置


如果这关系到兼容性,我将在Python中使用此正则表达式。

您可以将此正则表达式与lookahead和lookahead断言一起使用:

(?:(?<=/)|^)[^/]*(?=/)
代码:

正则表达式详细信息:


?:?您可以将此正则表达式与前向和后向断言一起使用:

(?:(?<=/)|^)[^/]*(?=/)
代码:

正则表达式详细信息:

?:?您可以将re.split用于与str.split相同的目的,仅使用正则表达式,然后删除最后一项:

>>> import re
>>> foo = "311102Z/5663.00N/00813.02E/GPS//03/-/"

>>> re.split("/", foo)[:1]
['311102Z', '5663.00N', '00813.02E', 'GPS', '', '03', '-']
您可以将re.split用于与str.split相同的目的,仅使用正则表达式,然后删除最后一项:

>>> import re
>>> foo = "311102Z/5663.00N/00813.02E/GPS//03/-/"

>>> re.split("/", foo)[:1]
['311102Z', '5663.00N', '00813.02E', 'GPS', '', '03', '-']
那么,我建议:

import re
 
entry = "311102Z/5663.00N/00813.02E/GPS//03/-/" 
  
match = re.findall("([^/]*)/", entry)  
print(match)
返回

['311102Z', '5663.00N', '00813.02E', 'GPS', '', '03', '-']
那么,我建议:

import re
 
entry = "311102Z/5663.00N/00813.02E/GPS//03/-/" 
  
match = re.findall("([^/]*)/", entry)  
print(match)
返回

['311102Z', '5663.00N', '00813.02E', 'GPS', '', '03', '-']

另一种方法是,您可以将除/之外的任何字符匹配1+倍,并在右侧断言a/

或者获得两个前斜杠之间的位置

[^/]+(?=/)|(?<=/)(?=/)
输出

'311102Z', '5663.00N', '00813.02E', 'GPS', '', '03', '-']

另一种方法是,您可以将除/之外的任何字符匹配1+倍,并在右侧断言a/

或者获得两个前斜杠之间的位置

[^/]+(?=/)|(?<=/)(?=/)
输出

'311102Z', '5663.00N', '00813.02E', 'GPS', '', '03', '-']
还有一条Python:

(?<=/)(?=/)|[^/]+
将[^/]+更改为[^/\n]+以防止匹配项跨越行终止符。

再来一条Python:

(?<=/)(?=/)|[^/]+

将[^/]+更改为[^/\n]+以防止匹配项跨越行终止符。

为什么需要使用正则表达式?听起来您可以只使用str.split/?您可以只使用[^/]*/作为正则表达式参见demo:@PeterH。不幸的是,为了与系统的其他部分兼容,我们需要使用正则表达式来实现这一点,因为此代码必须处理的所有其他行都需要使用正则表达式进行拆分。@anubhava,谢谢,但不幸的是,我们需要完全匹配,但结尾不带斜杠,同样,由于系统的一些其他要求,我们不能只选择第一组。这里的“完全匹配”是指我的要点列表中的每个匹配都必须是匹配的全部内容,而不是匹配中某个组的内容。@Ruzihm,我不明白为什么。OP已经清楚地说明了这个问题,没有提及应该采取的方法。为什么需要使用正则表达式?听起来您可以只使用str.split/?您可以只使用[^/]*/作为正则表达式参见demo:@PeterH。不幸的是,为了与系统的其他部分兼容,我们需要使用正则表达式来实现这一点,因为此代码必须处理的所有其他行都需要使用正则表达式进行拆分。@anubhava,谢谢,但不幸的是,我们需要完全匹配,但结尾不带斜杠,同样,由于系统的一些其他要求,我们不能只选择第一组。这里的“完全匹配”是指我的要点列表中的每个匹配都必须是匹配的全部内容,而不是匹配中某个组的内容。@Ruzihm,我不明白为什么。OP已经清楚地说明了问题,但没有提及应采取的方法。这是我第一次建议OP在评论中,但不幸的是OP不能使用捕获组。这是我第一次建议OP在评论中,但不幸的是OP不能使用捕获组。这是我第一次建议OP在评论中,但不幸的是OP无法使用捕获组。听起来OP的代码库有问题:这是我第一次在评论中建议OP,但不幸的是OP不能使用捕获组。听起来OP的代码库有问题:嗨,我今天发布了一个问题,如果你知道解决问题的新方法,你能在那里发布吗?嗨,我今天发布了一个问题,如果你知道解决这个问题的新方法,你能在那里发布吗?