Regex 从单线字符串中选择北距
我有以下字符串Regex 从单线字符串中选择北距,regex,python-3.x,Regex,Python 3.x,我有以下字符串 Start: 738392E, 6726376N 我使用(?提取了738392ok,因为您使用了正面的lookaheads。这些只是做出一些断言,但不会“移动头部” (?=(art\:\s\s*)确保你在“art:…”之前。接下来是另一个积极的前瞻,你用星号量化,使之成为可选。最后你匹配任何东西,这样你就可以在你的捕获组中获得剩余的部分 我建议使用更简单的正则表达式: (?<=(art\:\s))(\d+)\D+(\d+) (?因为你使用了正面表情。这些表情只是做了一些
Start: 738392E, 6726376N
我使用
(?提取了738392
ok,因为您使用了正面的lookaheads。这些只是做出一些断言,但不会“移动头部”
(?=(art\:\s\s*)
确保你在“art:…”之前。接下来是另一个积极的前瞻,你用星号量化,使之成为可选。最后你匹配任何东西,这样你就可以在你的捕获组中获得剩余的部分
我建议使用更简单的正则表达式:
(?<=(art\:\s))(\d+)\D+(\d+)
(?因为你使用了正面表情。这些表情只是做了一些断言,但不会“把头向前移动”
(?=(art\:\s\s*)
确保你在“art:…”之前。接下来是另一个积极的前瞻,你用星号量化,使之成为可选。最后你匹配任何东西,这样你就可以在你的捕获组中获得剩余的部分
我建议使用更简单的正则表达式:
(?<=(art\:\s))(\d+)\D+(\d+)
(?您匹配它后面的整个零件,因为您使用的*
将匹配到行尾
请注意,模式末尾的此部分[0-9]*
不匹配,因为它是可选的,并且前面的*
在字符串末尾之前已经匹配
你可以在没有任何监视的情况下获得比赛:
(art:\s)(\d+)[^,]+,\s(\d+)
如果只需要匹配项,可以使用
(?您匹配它后面的整个零件,因为您使用的*
将匹配到行尾
请注意,模式末尾的此部分[0-9]*
不匹配,因为它是可选的,并且前面的*
在字符串末尾之前已经匹配
你可以在没有任何监视的情况下获得比赛:
(art:\s)(\d+)[^,]+,\s(\d+)
如果只需要匹配项,可以使用
(?没有必要把它弄得这么复杂。只要使用
开始:(\d+)E、(\d+)N
或
\b\d+(?=[EN]\b)
如果需要分别匹配每个位
你的表达方式除了前面提到的问题外,还有几个问题:1)你的第一次和第二次前瞻在不同的位置匹配,2)你的第二次前瞻是量化的,25年来,我从未见过有人这样做,所以我很荣幸您的捕获组匹配任何内容,包括任何行或空字符串。您无需将其复杂化。只需使用
开始:(\d+)E、(\d+)N
或
\b\d+(?=[EN]\b)
如果需要分别匹配每个位
除了前面提到的问题外,你的表达还有几个问题:1)你的第一次和第二次前瞻在不同的位置匹配,2)你的第二次前瞻是量化的,25年来,我从未见过有人这样做,所以我很荣幸,3) 您的捕获组匹配任何内容,包括任何行或空字符串。您的第一个前瞻将从一开始匹配art:
。第二个前瞻不匹配任何东西,但它是无关的,因为您有*
量词。因此,您将从第一个前瞻性测试为阳性的位置开始匹配,直到行尾与(.*[0-9]*)
匹配。您的第一个前瞻性将从一开始就与艺术:
匹配。第二个前瞻不匹配任何东西,但它是无关的,因为您有*
量词。因此,您将从第一个前瞻测试为阳性的位置开始匹配,直到行尾与(.*[0-9]*)
AHA。。。谢谢,我刚刚用(?=(艺术\:\s\s*)(?=[,])*(.[0-9]*)(……)做的,它没有那么优雅。对星星要小心,尤其是对*
,因为a)它们不能匹配任何东西,因为它们是可选的,如果我想要的只是一个正则表达式来匹配相关文本,就像第1组匹配一样,而不提供其他的。这是因为我正在将文本解析为一个数据帧,它解析三个组。您想要两个组吗?移除了望台里的内心妄想。啊哈。。。谢谢,我刚刚用(?=(艺术\:\s\s*)(?=[,])*(.[0-9]*)(……)做的,它没有那么优雅。对星星要小心,尤其是对*
,因为a)它们不能匹配任何东西,因为它们是可选的,如果我想要的只是一个正则表达式来匹配相关文本,就像第1组匹配一样,而不提供其他的。这是因为我正在将文本解析为一个数据帧,它解析三个组。您想要两个组吗?删除lookback中的内部偏执。如果我想要的只是一个正则表达式来匹配相关的文本,就像第1组匹配一样,而不提供其他的。这是因为我将文本解析为一个数据帧,它将解析三个数据帧groups@wwnde我不知道你的意思。你能给出一个你期望的输出的例子吗?@wwnde一些简单的东西,比如Start:(\d+)E |,(\d+)N
,如果你不关心匹配部分的样子,它可能会做。这是因为捕获组在替换的两个部分中都是第一个。@wwnde或者您可以使用我的第二个表达式的变体并保存前瞻,因为您使用的是捕获组:\b(\d+)[EN]\b
@wwnde您可以将表达式缩减为\b(\d+)N
。紧跟在lookback断言之后的量词,如(?如果我想要的只是一个正则表达式,将相关文本匹配为第1组匹配,而不提供其他匹配。这是因为我将文本解析为一个数据帧,它将解析三个groups@wwnde我不知道你是什么意思。你能举一个你期望的输出的例子吗?@wwnde像Start:(\d+)E |,(\d+)这样简单的东西N
如果您不关心匹配部分的外观,则可能会这样做。这是因为捕获组在替换的两个部分中都是第一个。@wwnde或者您可以使用我的第二个表达式的变体并保存您自己