将正则表达式应用于 R 中的字符串

Posted

技术标签:

【中文标题】将正则表达式应用于 R 中的字符串【英文标题】:Applying a regular expression to a string in R 【发布时间】:2022-01-06 08:35:57 【问题描述】:

我刚刚开始了解 R 语言,之前使用过 python。挑战是用 * 替换字符串中每个单词的最后一个字符。

它应该是什么样子:example text in string,结果工作:exampl* tex* i* strin*

我的代码:

library(tidyverse)
library(stringr)   

string_example = readline("Enter our text:")
string_example = unlist(strsplit(string_example, ' '))
string_example

result = str_replace(string_example, pattern = "*\b", replacement = "*")
result

我收到一个错误:

> result = str_replace(string_example, pattern = "*\b", replacement = "*")
Error in stri_replace_first_regex(string, pattern, fix_replacement(replacement),  : 
  Syntax error in regex pattern. (U_REGEX_RULE_SYNTAX, context=``)

帮助解决任务

哦,我注意到一个错误,模式应该是.\b。代码是这样执行的,但是字符串中没有替换

【问题讨论】:

str_replace_all("example text in string",". ","* ") %>% str_replace(".$","*") 【参考方案1】:

如果您的意思是仅由字母组成的单词,则可以使用

string_example <- "example text in string"
library(stringr)
str_replace_all(string_example, "\\pL\\b", "*")
## => [1] "exampl* tex* i* strin*"

请参阅R demo 和regex demo。

详情

\pL - 匹配任何 Unicode 字母的 Unicode 类别(属性)类 \b - 单词边界,在这种情况下,它确保右侧没有其他单词字符。如果与\pL 匹配的字母后面紧跟一个字母、数字或_(这些都是单词字符),则匹配失败。如果您想将此限制为信件检查,请将 \b 替换为 (?!\pL)

注意反斜杠是双倍的,因为在常规字符串文字中,反斜杠用于形成字符串转义序列,因此需要转义自身以在字符串文字中引入文字反斜杠。

需要考虑的其他事项

如果你不想改变一个字母的单词,在开头添加一个非单词边界,"\\B\\pL\\b" 如果您想避免匹配后跟 - 的字母 + 另一个字母(即一些复合词),您可以添加前瞻检查:"\\pL\\b(?!-)"

您可以根据需要组合外观和(非)单词边界。

【讨论】:

哇,多么及时,谢谢,虽然我不是很清楚,但也许我会随着时间的推移习惯它

以上是关于将正则表达式应用于 R 中的字符串的主要内容,如果未能解决你的问题,请参考以下文章

量词可以用于R中的正则表达式替换吗?

Pyspark:UDF 将正则表达式应用于数据帧中的每一行

R: 正则表达式

R语言学习13-正则表达式

正则表达式及R字符串处理之终结版

根据相同字符的不同位置将正则表达式应用于熊猫列