Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 从单线字符串中选择北距_Regex_Python 3.x - Fatal编程技术网

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或者您可以使用我的第二个表达式的变体并保存您自己