【问题标题】:Extract string between characters and include new lines? [duplicate]提取字符之间的字符串并包含新行? [复制]
【发布时间】:2020-04-09 22:14:27
【问题描述】:

在使用字符串提取两个字符之间的字符串时遇到问题。我需要获取这些字符之间的所有内容,包括换行符:

reprEx <- "2100\n\nELECTRONIC WITHDRAWALS| om93 CCD ID: 964En To American Hon\nELECTRONIC WITHDRAWALSda Finance Corp 295.00\nTotal Electronic Withdrawals $93,735.18\n[OTHER WITHDRAWALS| WITHDRAWALS\nDATE DES $93,735.18\n[OTHER WITHDRAWALS| WITHDRAWALS\nDATE DESCRIPTION AMOUNT\n04/09 Pmt ID 7807388390 Refunded IN Error On 04/08"

desiredResult <- "| om93 CCD ID: 964En To American Hon\nELECTRONIC WITHDRAWALSda Finance Corp 295.00\nTotal Electronic Withdrawals $93,735.18\n[OTHER WITHDRAWALS| WITHDRAWALS\nDATE DES $93,735.18\n["

我尝试过使用:

desiredResult <- str_match(reprEx, "ELECTRONIC WITHDRAWALS\\s*(.*?)\\s*OTHER WITHDRAWALS")[,2]

但我只是让 NA 回来。我只想获取字符串中第一次出现 ELECTRONIC WITHDRAWALS 和第一次出现 OTHER WITHDRAWALS 之间的所有内容。我不知道新行是否是导致问题的原因

【问题讨论】:

  • 您想要的结果与您的陈述不一致:"在第一次出现...和第一次出现...之间",这里有第二个字符串你的输出中。
  • 因为这被列为一个长字符串,但我不相信\n 会产生不利影响。
  • "(?s)ELECTRONIC WITHDRAWALS\\s*(.*?)\\s*OTHER WITHDRAWALS",见answer

标签: r regex stringr


【解决方案1】:

我认为你的desiredOutput与你的段落不一致,我会优先考虑后者:

字符串中第一次出现 ELECTRONIC WITHDRAWALS 和第一次出现 OTHER WITHDRAWALS 之间的所有内容

first <- gregexpr("ELECTRONIC WITHDRAWALS", reprEx)[[1]]
first
# [1]  7 66
# attr(,"match.length")
# [1] 22 22
# attr(,"index.type")
# [1] "chars"
# attr(,"useBytes")
# [1] TRUE
# generalized a little, in case you change the reprEx string
leftside <- if (first[1] > 0) first[1] + attr(first, "match.length")[1] else 1
second <- gregexpr("OTHER WITHDRAWALS", substr(reprEx, leftside, nchar(reprEx)))[[1]]
second
# [1] 124 176
# attr(,"match.length")
# [1] 17 17
# attr(,"index.type")
# [1] "chars"
# attr(,"useBytes")
# [1] TRUE
rightside <- leftside + second[1] - 2
c(leftside, rightside)
# [1]  29 151
substr(reprEx, leftside, rightside)
# [1] "| om93 CCD ID: 964En To American Hon\nELECTRONIC WITHDRAWALSda Finance Corp 295.00\nTotal Electronic Withdrawals $93,735.18\n["

【讨论】:

    猜你喜欢
    • 2020-05-20
    • 1970-01-01
    • 1970-01-01
    • 2014-10-30
    • 1970-01-01
    • 2021-09-08
    • 2019-10-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多