我正在尝试使用正则表达式来匹配以下文本中斜杠之间的条目:
311102Z/5663.00N/00813.02E/GPS//03/-/
对于这个例子,结果应该是一系列具有以下内容的匹配项:
311102Z
5663.00N
00813.02E
GPS
- (一个空字符串)
03
-
重要的是我们要捕获空条目并返回一个空匹配项。不幸的是,由于各种原因,我们不能在这里使用分组,或者匹配斜杠本身并在其上拆分。
我有以下正则表达式几乎可以正常工作:(.*?)(?=/)
。可以看到此正则表达式的交互式显示 here .它可以很好地匹配所有条目,但在每个条目的末尾都有额外的空匹配。
我尝试用 +
替换 *
,但这当然意味着它与空白条目不匹配。
有没有人知道我可以做些什么来使它符合我想要的方式 - 即。 没有这些额外的空匹配,但是有斜线之间没有字符的空条目。
如果兼容性很重要,我在 Python 中使用这个正则表达式。
最佳答案
您可以将此正则表达式与前瞻和后视断言一起使用:
(?:(?<=/)|^)[^/]*(?=/)
代码:
>>> import re
>>> s = '311002Z/3623.00N/00412.02E/GPS//03/-/'
>>> print (re.findall(r'(?:(?<=/)|^)[^/]*(?=/)', s))
['311002Z', '3623.00N', '00412.02E', 'GPS', '', '03', '-']
正则表达式详细信息:
-
(?:(?<=/)|^)
: 回头断言我们有 start 或/
在以前的位置 -
[^/]*
: 匹配 0 个或多个不是/
的字符 -
(?=/)
: 向前断言我们有一个/
前进
关于python - 正则表达式匹配斜杠之间的条目,但不匹配斜杠 - 包括空条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62600563/