标签: re2

是否存在类似RE2的Java正则表达式库?

有没有人遇到Java版的Google正则表达式库RE2或具有类似功能和良好性能的Java库?性能要求是关于正则表达式的长度和输入文本长度的线性时间.

澄清

大多数正则表达式实现使用回溯算法来匹配输入文本,因此在一些简单的正则表达式上是指数式的(.*).(.*).(.*).(.*).RE2是谷歌的一个库,它通过使用一种算法来解决这个问题,该算法使用自动机理论的概念与输入大小线性变化.提问者想要知道是否存在基于该算法的Java库.

java regex re2

34
推荐指数
3
解决办法
3693
查看次数

是否有可能使用Python的re2?

我刚刚发现http://code.google.com/p/re2,使用一个长期被忽视的方式(一个有前途的库汤普森NFA)来实现正则表达式引擎,可以是数量级比AWK的可用引擎更快,Perl或Python.

所以我下载了代码并做了平常的sudo make install事情.然而,这个动作似乎只是添加/usr/local/include/re2/re2.h到我的系统.似乎有一些``` .afile in addition, but then what is it with this .a``扩展名?

我想使用Python中的re2(最好是Python 3.1)并很高兴看到像make_unicode_groups.py发行版中的文件(可能只是在构建过程中使用?).然而,那些没有部署在我的机器上.

我如何使用Python的re2?


更新两个友好的人已经指出,我可以尝试从源代码构建DLLs/*.so文件,然后使用Python的ctypes库来访问它们.任何人都可以提供有用的指示如何做到这一点?我在这里几乎一无所知,尤其是第一部分(构建*.so文件).


更新我也张贴了这个问题(前面)的RE2开发者群体,没有回答到现在(这是一小群),今天的(有些人口较多)comp.lang.py[-thread这里- ].希望来自不同角落的人们可以相互联系.我的猜测是技术娴熟的人可以在他们的20%你的免费时间属于谷歌太时间片的几个小时内做到这一点; 这会让我筋疲力尽.是否有一个工具可以自动将C++愚蠢地转换为Python需要能够连接的任何C语言?然后可能会得到一个可行的结果可以简化为聪明的工具链.

(咆哮)为什么这么难?认为在2010年我们仍然不能拥有我们丰富的软件,只是互相交谈.这是一个障碍,每当你想要从Python处理一些C代码时,你必须总是抓住这些链接位.这需要大量工作,但只提供特定于C代码版本和Python版本的扩展模块,因此它可以快速老化.(/ rant) 是否可以在不同的进程中运行这些东西(如果我有一个re2可执行文件,可以产生数据的结果,比如说,subprocess/Popen/communicate())?(这不应该是一个纯粹的命令行工具,就必须在每次需要时的处理的开口,但连续运行的单个PROCESSS;也许存在包装之类的"丑化"这样的C代码).

python regex re2

22
推荐指数
2
解决办法
4684
查看次数

Google电子表格:拆分字符串并获取最后一个元素

假设我有一个具有类似值的列

foo/bar
chunky/bacon/flavor
/baz/quz/qux/bax
Run Code Online (Sandbox Code Playgroud)

即,由"/"分隔的可变数量的字符串.

在另一列中,我希望从"/"中分割后,从每个字符串中获取最后一个元素.所以,该专栏将有

bar
flavor
bax
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚这一点.我可以拆分"/"并得到一个数组,我可以看到函数"index"从数组中获取一个特定的编号索引元素,但是找不到在这个函数中说"最后一个元素"的方法.

regex split google-sheets re2 google-sheets-formula

20
推荐指数
2
解决办法
1万
查看次数

为什么 std::regex 比其他正则表达式库慢得多?

这个 Github 存储库将 std::regex 添加到正则表达式引擎列表中,但被其他引擎淘汰了。

为什么 std::regex - 在 libstdc++ 中实现 - 比其他的慢得多?这是因为 C++ 标准要求还是只是特定的实现没有得到很好的优化?

同样在枪战中,即使添加了 std::regex::extended 标志,std::regex 也无法编译所有其他人都接受的几个正则表达式。他们是(?i)Twain、、、、和。\b\w+nn\b(?i)Tom|Sawyer|Huckleberry|Finn\s[a-zA-Z]{0,12}ing\s([A-Za-z]awyer|[A-Za-z]inn)\s\p{Sm}

更新:添加了与 boost::regex 的比较。

UPDATE2:添加了ctre

在此输入图像描述

c++ regex benchmarking libstdc++ re2

20
推荐指数
1
解决办法
1万
查看次数

Google RE2 的正则表达式测试器

我正在寻找适用于 Google Big Data (RE2) reg 表达式的正则表达式测试器。那里有一些测试人员,但他们似乎都不明白我的说法。这些是我尝试过的,它们适用于简单的表达式,但不适用于我的:

这是我的正则表达式:

^(?:1-)?((?:R|RO|Ro)?[:|.]?\\s?\\d{3}[-|.]?\\d{4}[-|/]F\\d{2}-\\d{2})$

我将在其中处理这样的字符串:

  • 罗708-2859/F07-01
  • RO708-2859-F06-04
  • RO703-3877-F01
  • 1-RO520-0628-F08
  • RO6868847-000-010

有谁知道我如何输入不同的语句或者我可以在哪里测试它?

regex re2

13
推荐指数
1
解决办法
4万
查看次数

使用正向前瞻(?=正则表达式)和re2

因为我对re2有点新意,所以我试图弄清楚如何(?=regex)Go中使用JS,C++或任何PCRE风格的正面观察.

以下是我正在寻找的一些例子.

JS:

'foo bar baz'.match(/^[\s\S]+?(?=baz|$)/);
Run Code Online (Sandbox Code Playgroud)

蟒蛇:

re.match('^[\s\S]+?(?=baz|$)', 'foo bar baz')
Run Code Online (Sandbox Code Playgroud)
  • 注意:两个例子都匹配 'foo bar '

非常感谢.

regex go re2

10
推荐指数
2
解决办法
7381
查看次数

否定 RE2 语法中的匹配?

如何在 RE2 中为“匹配字符串不以 4 或 5 开头”编写正则表达式?

在 PCRE 中我会使用^(?!4)但 RE2不支持该语法

regex re2

8
推荐指数
1
解决办法
9108
查看次数

Google表格公式中的多个正则表达式匹配

我正在尝试A1使用Google表格正则表达式公式获取给定字符串中连字符前面的所有数字列表(假设在单元格中):

=REGEXEXTRACT(A1, "\d-")
Run Code Online (Sandbox Code Playgroud)

我的问题是它只返回第一场比赛...... 我怎么能得到所有的比赛

示例文字:

"A1-Nutrition;A2-ActPhysiq;A2-BioMeta;A2-Patho-jour;A2-StgMrktg2;H2-Bioth2/EtudeCas;H2-Bioth2/Gemmo;H2-Bioth2/Oligo;H2-Bioth2/Opo;H2-Bioth2/Organo;H3-Endocrino;H3-Génétiq"
Run Code Online (Sandbox Code Playgroud)

我的公式返回1-,而我想得到1-2-2-2-2-2-2-2-2-2-3-3-(作为数组或连接文本).

我知道我可以使用脚本或其他函数(如SPLIT)来实现所需的结果,但我真正想知道的是如何在REGEX.*"Google表格公式"中获得re2正则表达式以返回这样的多个匹配.有点像" G ^ -叶形不要返回第一场比赛后,在"选项regex101.com

我也尝试删除不需要的文本REGEXREPLACE,但没有成功(我无法摆脱不在连字符之前的其他数字).

任何帮助赞赏!谢谢 :)

regex google-sheets re2

8
推荐指数
5
解决办法
8640
查看次数

在golang中使用嵌套组的regexp问题

考虑以下玩具示例.我想在Go中使用正则表达式匹配,其中名称是a由单个分隔的字母序列#,因此a#a#aaa是有效的,但是a#a##a不是.我可以通过以下两种方式编写正则表达式:

r1 := regexp.MustCompile(`^a+(#a+)*$`)
r2 := regexp.MustCompile(`^(a+#)*a+$`)
Run Code Online (Sandbox Code Playgroud)

这两项都有效.现在考虑更复杂的匹配由单斜杠分隔的名称序列的任务.如上所述,我可以用两种方式编写代码:

^N+(/N+)*$
^(N+/)*N+$
Run Code Online (Sandbox Code Playgroud)

其中N是带有^和$ stripped的名称的正则表达式.由于我有两个N的情况,所以现在我可以有4个正则表达式:

    ^a+(#a+)*(/a+(#a+)*)*$
    ^(a+#)*a+(/a+(#a+)*)*$
    ^((a+#)*a+/)*a+(#a+)*$
    ^((a+#)*a+/)*(a+#)*a+$
Run Code Online (Sandbox Code Playgroud)

问题是为什么当匹配字符串时"aa#a#a/a#a/a"第一个失败而其余3个案例按预期工作?是什么导致第一个正则表达式不匹配?完整的代码是:

package main

import (
    "fmt"
    "regexp"
)

func main() {
    str := "aa#a#a/a#a/a"
    regs := []string {
        `^a+(#a+)*(/a+(#a+)*)*$`,
        `^(a+#)*a+(/a+(#a+)*)*$`,
        `^((a+#)*a+/)*a+(#a+)*$`,
        `^((a+#)*a+/)*(a+#)*a+$`,
    }    
    for _, r := range(regs) {
        fmt.Println(regexp.MustCompile(r).MatchString(str))
    } 
}
Run Code Online (Sandbox Code Playgroud)

令人惊讶的是它打印 false true true true

regex go re2

6
推荐指数
1
解决办法
793
查看次数

如何在 Google Docs re2 表达式中筛选双引号?

我正在尝试在 Google 表格上的正则表达式中筛选双引号,但没有运气。A1 单元格文本 =some "name" 我的公式

=REGEXEXTRACT(A1;"\"(.*)\"")
Run Code Online (Sandbox Code Playgroud)

但是 Google Docs 认为我使用引号作为打开/关闭参数。请帮忙。

GoogleDocs 用于正则表达式的库是 re2

regex google-docs re2

6
推荐指数
2
解决办法
2058
查看次数