【问题标题】:Applying a regular expression to a string in R将正则表达式应用于 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(".$","*")

标签: r regex


【解决方案1】:

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

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

请参阅R demoregex demo

详情

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

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

需要考虑的其他事项

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

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

【讨论】:

  • 哇,多么及时,谢谢,虽然我不是很清楚,但也许我会随着时间的推移习惯它
猜你喜欢
  • 2016-01-28
  • 1970-01-01
  • 2022-01-25
  • 1970-01-01
  • 2018-05-14
  • 1970-01-01
  • 2019-04-02
  • 2020-04-08
  • 1970-01-01
相关资源
最近更新 更多