r - 解析长字符串以检索 channel_id
问题描述
我从 Telegram 中提取了很多数据。但是,我无法隔离 channel_id。现在我有一个长字符串,在许多其他信息中包含channel_id。问题是如何删除除 channel_id 之外的所有内容,即“channel_id=XXXXXXXXXX”后面的数字?
我的 data.frame 的子集
df <- structure(list(channel_id = c("MessageFwdHeader(date=datetime.datetime(2021, 5, 13, 20, 50, 47, tzinfo=datetime.timezone.utc), imported=False, from_id=PeerChannel(channel_id=1292436059), from_name=None, channel_post=1404, post_author=None, saved_from_peer=None, saved_from_msg_id=None, psa_type=None)",
"MessageFwdHeader(date=datetime.datetime(2021, 5, 4, 9, 24, 16, tzinfo=datetime.timezone.utc), imported=False, from_id=PeerChannel(channel_id=1480423705), from_name=None, channel_post=224, post_author=None, saved_from_peer=None, saved_from_msg_id=None, psa_type=None)",
"MessageFwdHeader(date=datetime.datetime(2021, 3, 25, 14, 9, 38, tzinfo=datetime.timezone.utc), imported=False, from_id=PeerChannel(channel_id=1489900933), from_name=None, channel_post=627, post_author=None, saved_from_peer=None, saved_from_msg_id=None, psa_type=None)",
"MessageFwdHeader(date=datetime.datetime(2021, 3, 12, 22, 10, 3, tzinfo=datetime.timezone.utc), imported=False, from_id=PeerChannel(channel_id=1455689590), from_name=None, channel_post=1457, post_author=None, saved_from_peer=None, saved_from_msg_id=None, psa_type=None)",
"MessageFwdHeader(date=datetime.datetime(2021, 3, 9, 12, 52, 5, tzinfo=datetime.timezone.utc), imported=False, from_id=PeerChannel(channel_id=1348575245), from_name=None, channel_post=None, post_author=None, saved_from_peer=None, saved_from_msg_id=None, psa_type=None)"
)), row.names = c(NA, -5L), class = c("data.table", "data.frame"))
期望的结果
channel_id <- structure(list(channel_id = c("1292436059",
"1480423705",
"1489900933",
"1455689590",
"1348575245"
)), row.names = c(NA, -5L), class = c("data.table", "data.frame"))
解决方案
您可以尝试regexpr
查看(channel_id=
using (?<=\\(channel_id=)
, 而不是 match digit(s)\\d+
并查看)
using(?=\\))
并使用 提取匹配项regmatches
。
regmatches(df$channel_id, regexpr("(?<=\\(channel_id=)\\d+(?=\\))"
, df$channel_id, perl=TRUE))
#[1] "1292436059" "1480423705" "1489900933" "1455689590" "1348575245"
或结合两个sub
。
sub(").*", "", sub(".*\\(channel_id=", "", df$channel_id))
#[1] "1292436059" "1480423705" "1489900933" "1455689590" "1348575245
推荐阅读
- html - 如何使用 CSS flexbox 在同一行上使用不同的对齐方式?
- typescript - 打字稿将未知类型转换为接口类型
- sql - 当我在 Crystal Reports 的“数据库专家”中展开数据库时,为什么会显示“未找到项目”?
- android - Firebase 分析未提供所有用户的记录事件
- python - 如何获取字符串中任何整数之前的每个字符?
- winapi - 如何使用 C++ 更改 Windows 上的桌面背景图像?
- javascript - 反应帖子,有什么可能?
- jsp - Struts 并使用跟随标签传递参数,它是如何工作的?
- c# - 如何根据属性关系按类型从最小到最依赖对实例集合进行排序?
- python - CRC - Python - 如何从字符串计算 JAMCRC 十进制数