使用正则表达式替换R

问题描述

尽管R中有很多关于正则表达式的示例和问题,但似乎没有一个适合我的问题。在我的项目中,我正在努力处理像“4x1²+1x1²”这样的字符串。上标字符对我来说似乎很成问题。

我的目标:我想从4x1²+1x1²获得4x1^+1x1^。只需将所有上标替换为“ ^”。容易,是吗? 我找到了用于该“ \ p {No}”的模式,但是我担心它无法在R中运行或使用不正确。

我尝试过的事情:

my_string <- "4x1²+1x1²"
patt <- "\\p{No}"
gsub(patt,my_string,replacement = "^") # error
gsub(patt,replacement = "^",perl = TRUE)
stringr::str_replace_all(my_string,patt,"^")

没有任何效果。您对替换上标有任何想法吗?

编辑:

我在Windows上工作。我试图在Linux上运行这些命令,但它确实起作用。似乎必须与系统设置或R会话设置有关。

解决方法

将其转换为ASCII,替换并转换为UTF8:

> utf8ToInt("²")
[1] 178
> utf8ToInt("^")
[1] 94
> intToUtf8(sapply(utf8ToInt(my_string),function(x) ifelse(x == 178L,94L,x)))
[1] "4x1^+1x1^"
,

您可以使用

my_string <- "4x1²+1x1²"
gsub("[⁰¹²³⁴⁵⁶⁷⁸⁹]","^",my_string)

或者,使用\u{XXXX}表示法(在Windows中测试):

gsub("[\u{2070}\u{00B9}\u{00B2}\u{00B3}\u{2074}-\u{2079}]",my_string)

或者,像{p>

gsub

请参见R demo onlineregex demo

,

您可以尝试这种方式

library(stirngr)
str <- "4x1²+1x1²"
str_replace_all(str,"²","\\^")
#[1] "4x1^+1x1^"

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...