gpt4 book ai didi

regex - R - 从字符串中删除最后一个单词的正则表达式

转载 作者:行者123 更新时间:2023-12-01 13:48:40 24 4
gpt4 key购买 nike

我有如下数据 -

PLAYSTORE BANGKOK
FLOAT@THE BAY SINGAPORE
YANTRA SINGAPORE
AIRASIA_QS9DQQL SINGAPORE

我想从每个字符串中删除最后一个单词,如果它在我正在寻找的城市列表中 -

sub('(?i)^(.*)\\b(singapore|stockholm|singapor|bangkok|kuala lumpur|london|tokyo)$','\\2', merch_desc$desc2 )

但是\1 或\2 不起作用,我又得到了完整的字符串。有办法纠正这个问题吗?

我想要 2 个输出 - 1 个带有公司名称,另一个带有 2 个独立向量中的位置。

merch_desc$merch -

  PLAYSTORE 
FLOAT@THE BAY
YANTRA
AIRASIA_QS9DQQL

merch_desc$loc -

BANGKOK
SINGAPORE
SINGAPORE
SINGAPORE

它适用于字符串而不适用于数据帧,这似乎很奇怪 -

test$desc2
[1] "qoo10 singapore " "bill payment via internet banking" "mcdonald's restaurants singapore "
[4] "hdb season parking singapore " "grabtaxi pte ltd singapore "

这行不通 -

sub('^.* (singapore|stockholm|singapor|bangkok|kuala lumpur|london|tokyo)$', '\\1', test$desc2 )
[1] "qoo10 singapore " "bill payment via internet banking" "mcdonald's restaurants singapore "
[4] "hdb season parking singapore " "grabtaxi pte ltd singapore "

但这行得通 -

sub('^.* (singapore|stockholm|singapor|bangkok|kuala lumpur|london|tokyo)$', '\\1', 'tigerair y843km singapore' )
[1] "singapore"

编辑 2 -

使用 trimws()。没有 Trimws,它无法处理多个空格。

谢谢,马尼什

最佳答案

我们可以使用 pattern 中的 sub 将子字符串捕获为组,然后我们在捕获组之间添加一个分隔符 (,) replacement,在 read.table 中将其用作 sep。如果有前导/滞后空格,通过遍历列将 str_trimstringr 中移除。

library(stringr)
d1 <- read.table(text=sub('(.*)\\s+(\\S+)$', '\\1,\\2', v1),sep=',')
d1[] <- lapply(d1, str_trim)
d1
# V1 V2
#1 PLAYSTORE BANGKOK
#2 FLOAT@THE BAY SINGAPORE
#3 YANTRA SINGAPORE
#4 AIRASIA_QS9DQQL SINGAPORE

或者如@RichardScriven 所建议的,用于修剪前导/滞后空格的 base R 选项是 trimws

d1[] <- lapply(d1, trimws)

数据

v1 <- c('PLAYSTORE BANGKOK','FLOAT@THE BAY          SINGAPORE',
'YANTRA SINGAPORE',
'AIRASIA_QS9DQQL SINGAPORE')

关于regex - R - 从字符串中删除最后一个单词的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33728967/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com