Regex 著名文本的正则表达式

Regex 著名文本的正则表达式,regex,wkt,Regex,Wkt,我正在研究正则表达式来验证和解析已知文本,这是一种用于传输空间数据的格式,如下所示: POLYGON((51.124 -3.973, 51.1 -3.012, ....)) 或 在其他变化中 这里有一个很好的答案:它使用正则表达式: \d+(?:\.\d*)? 从其他地方我也见过 \d*\.\d+|\d+ 及 这些似乎都做了同样的事情,但这让我想知道这3个正则表达式的相关工作,以及是否有任何性能问题或需要注意的微妙之处 要明确的是,我知道有一些库可以用各种语言解析WKT。我的问题纯粹是关于

我正在研究正则表达式来验证和解析已知文本,这是一种用于传输空间数据的格式,如下所示:

POLYGON((51.124 -3.973, 51.1 -3.012, ....))

在其他变化中

这里有一个很好的答案:它使用正则表达式:

\d+(?:\.\d*)?
从其他地方我也见过

\d*\.\d+|\d+

这些似乎都做了同样的事情,但这让我想知道这3个正则表达式的相关工作,以及是否有任何性能问题或需要注意的微妙之处


要明确的是,我知道有一些库可以用各种语言解析WKT。我的问题纯粹是关于数字提取正则表达式的相对行为。

这取决于您需要允许哪些数字格式,例如:

format 1: 22 format 2: 22.2 format 3: .2 format 4: 2. 如果要匹配这四种情况,可以使用:

\.\d+|\d+(?:\.\d*)?
(+)如果数字不是以点开头,第一个备选方案将立即失败,第二个备选方案将匹配所有其他情况。回溯限制在最小值。
(-)如果您有几个以点开头的数字,则将测试第一个备选方案,并且每次都会失败。然而,第一种选择很快就失败了(换句话说,出于同样的原因)。在这种情况下,最好使用
\d+(?:\。\d*)?\。\d+

显然,如果要支持负值,需要添加
-?

-?(?:\.\d+|\d+(?:\.\d*)?)

你已经知道正则表达式了吗?i、 e.你对文章中每个正则表达式的不同部分有基本的了解吗?是的,我理解匹配和非匹配组的概念,各种量词的含义等,但我觉得我遗漏了更深层次的东西。谢谢,这正是我希望得到的答案。WKT数据可能非常大,所以速度很重要。然而,lat/lon数据可以这样表示,首先,伦敦是一个数字可能以点开头的区域,尽管我只见过它是0.xxx,但绝对值得考虑。@JohnBarça:在这种情况下
0.xxx
第一种模式
\d+(\。。。。*)?
远不是最好的。 str | pattern | state -----+----------------+----------------------------- 123 | \d*\.\d+|\d+ | START 123 | \d*\.\d+|\d+ | OK 123 | \d*\.\d+|\d+ | OK 123 | \d*\.\d+|\d+ | OK 123 | \d*\.\d+|\d+ | FAIL => backtrack 123 | \d*\.\d+|\d+ | FAIL => backtrack 123 | \d*\.\d+|\d+ | FAIL => backtrack 123 | \d*\.\d+|\d+ | go to the next alternative 123 | \d*\.\d+|\d+ | OK 123 | \d*\.\d+|\d+ | OK 123 | \d*\.\d+|\d+ | OK => SUCCESS
\.\d+|\d+(?:\.\d*)?
-?(?:\.\d+|\d+(?:\.\d*)?)