将正则表达式应用于 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 中的字符串的主要内容,如果未能解决你的问题,请参考以下文章