regex - 将字符分组后的字符替换为空

标签 regex r dataframe

我有一个带有最大宽度为 200 的文本列的大 csv。在几乎所有情况下,数据都很好。在某些情况下,数据太长或没有完全正确填写,我想使用正则表达式来查找特定数字/字符配对的最后一个实例,然后删除它之后的所有内容。

例如数据:

df <- data.frame(ID = c("1","2","3"),
             text = c("A|explain what a is|12.2|Y|explain Y|2.36|",
                 "A|explain what a is|15.2|E|explain E|10.2|E|explain E but run out hal",
                 "D|explain what d is|0.48|Z|explain z but number 5 is present|"))

我的特定字符对是任何数字后跟 |

这意味着第 1 行很好,第 2 行将删除“10.2”后的所有内容,第 3 行将删除 0.48 后的所有内容

我试过这个正则表达式:
df[,2] <- sub("([^0-9]+[^|]*$)", "", df[,2])

它几乎几乎起作用了,但是我的数据中很少有在解释中出现数字的行并没有发挥作用。有什么线索吗?我还不是一个伟大的正则表达式,学习绳索

我看到了 this question关于分组,但不能完全适用于我的问题。

最佳答案

使用 sub ,我们捕获一个或多个字符( .* ),然后是多个数字之一,然后是一个点(如果存在)( \\.? ),然后是一个或多个作为一组的数字,然后是 |和其余的字符,直到字符串的末尾。在替换中,指定了捕获组 ( \\1 )。

sub('^(.*[0-9]+\\.?[0-9]+)\\|.*$', '\\1', df$text)

关于regex - 将字符分组后的字符替换为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34178610/

相关文章:

python多行正则表达式

c++ - 支持原始 UTF-8 的正则表达式引擎?

R:从数据计数生成直方图

r - 如何根据第三个变量的类别/值更改 ggplot2 箱形图中抖动点的颜色?

r - 拟合具有稳健标准误差的模型

count - Spark:如何转换Dataframe API的count(distinct(value))

java - 使用 Java 正则表达式匹配多个模式

c++ - 对 CMake find_path 提示使用正则表达式

python - Pandas 使用嵌套数据框列的总和创建一列

r - 笛卡尔积数据框