按第一个字符串选择/分组直到特定符号

问题描述

美好的一天,

我目前正在处理一个数据集,其中有一列采用这种格式。

PA-121-1512-asa-1241
PWW-121-1571-accs-21561
PSAWA-171-1616-gfaa-161
QSF-16-1613-63-asdfa
H-Elevator-15-asf-1112
QSF-asa-sda-afas-112

“-”符号之前的第一个字母序列被标识为“建筑位置”,因此我想将这些第一个字母序列保存在单独的列中。

我想知道如何选择 > 复制 > 将这些值粘贴到新列中,这样我最终会得到一列,例如:

地点:
PA
PPW
PSAWA
QSF
H
QSF

我尝试了这个功能

str_extract("PA-121-1512-asa-1241",".+?(?<=-)")

PA-121-1512-asa-1241 是我选择整列的示例。
这里我打印出来的是 PA- 而不仅仅是 PA。

如果需要更多数据,需要更详细的解释,请告诉我。我对在这个网站上写问题还是很陌生。

节日快乐!, 教育部

发帖...
在再次查看我的代码以复制粘贴 Cyrus 先生建议的正确示例后,我发现了我的错误。而不是:

str_extract("PA-121-1512-asa-1241",".+?(?<=-)")

就是:

str_extract("PA-121-1512-asa-1241","[^-]+")

这将返回 PA 而不是 PA-
这表明阅读您的代码 50 倍确实有帮助,因为之前的 49 倍没有帮助。

如果有人有更优雅/更高效的方法,我仍然很感兴趣!由于在 500 万行中运行此代码花了我很长时间。

解决方法

代替:
str_extract("PA-121-1512-asa-1241",".+?(? str_extract("PA-121-1512-asa-1241","[^-]+")
这将返回“PA”而不是“PA-” 这表明阅读代码 50 倍确实有帮助,因为之前的 49 倍没有。

str_extract() 所需的“模式”格式非常令人困惑。我的老师建议我阅读更多关于 Grep 的内容。