gpt4 book ai didi

python - R 相当于 Python 的 re.findall

转载 作者:行者123 更新时间:2023-12-02 11:22:17 25 4
gpt4 key购买 nike

我试图从字符串中获取 RegExp 的所有匹配项,但显然在 R 中这并不容易,或者我忽略了一些东西。说实话,这真的很令人困惑,我发现自己迷失在所有选项中:str_extractstr_matchstr_match_allregexecgrepgregexpr 以及谁知道还有多少其他。

实际上,我想要完成的只是(在 Python 中):

>>> import re
>>> re.findall(r'([\w\']+|[.,;:?!])', 'This is starting to get really, really annoying!!')
['This', 'is', 'starting', 'to', 'get', 'really', ',', 'really', 'annoying', '!', '!']

上述函数的问题在于,它们要么返回一个匹配项,要么根本不返回任何匹配项。

最佳答案

一般来说,R 不存在与 Python re.findall 完全相同的 R 语言,它要么返回匹配值列表,要么返回保存捕获组子匹配的元组(列表)。最接近的是 stringr 包中的 str_match_all,但它也非常接近 Python re.finditer(因为它返回第一个项目,然后是后续项目中的所有子匹配(捕获组内容)(仍然不完全等同于 re.finditer,因为仅返回文本,而不返回匹配数据对象)。因此,如果 str_match_all 未返回整个匹配值,则它将与 Python re.findall 完全相同。

您使用re.findall仅返回匹配,而不是捕获,模式中的捕获组是多余的,您可以将其删除。因此,您可以安全地将 regmatchesgregexpr 和 PCRE 风格一起使用(因为 [\\w'] 不适用于 TRE 正则表达式) ):

s <- "This is starting to get really, really annoying!!"
res <- regmatches(s, gregexpr("[\\w']+|[.,;:?!]", s, perl=TRUE))
## => [[1]]
[1] "This" "is" "starting" "to" "get" "really"
[7] "," "really" "annoying" "!" "!"

请参阅R demo

或者,要使 \w 识别 Unicode,使其像 Python 3 中一样工作,请添加 (*UCP) PCRE 动词:

res <- regmatches(s, gregexpr("(*UCP)[\\w']+|[.,;:?!]", s, perl=TRUE))

参见another R demo

如果您想使用stringr包(在幕后使用ICU正则表达式库),您需要str_extract_all:

res <- str_extract_all(s, "[\\w']+|[.,;:?!]")

关于python - R 相当于 Python 的 re.findall,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43401581/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com