【问题标题】:Regex containing both latin and cyrillic symbols [closed]包含拉丁文和西里尔文符号的正则表达式[关闭]
【发布时间】:2022-01-21 19:43:39
【问题描述】:

我有从html_text()得到的字符串

感到酸痛 — болеть感到酸痛 — страдать; мучиться

但应该是这样的

感到疼痛 — болеть
感到疼痛 — страдать; мучиться

问题是,rvest 无法区分空格和换行符,但我只需要以某种方式获取第一行“feel sore — болеть”。

我尝试使用stringr::str_extract(),但失败了。我该怎么办?

UPD:好的,我发现有html_text2(),但仍然可以使用正则表达式吗?

【问题讨论】:

标签: r extract rvest


【解决方案1】:

您可以使用两个否定字符类:

  • [^—]+:匹配任何 一次或多次
  • 的字符
  • [^A-Za-z]+:这匹配任何英文字母的大写或小写字母一次或多次的字符:

数据:

str <- c("feel sore — болеть feel sore about — страдать; мучиться", 
         "so long — разг. Пока!")

解决方案:

str_extract_all(str, "[^—]+—[^A-Za-z]+")
[[1]]
[1] "feel sore — болеть "                  "feel sore about — страдать; мучиться"

[[2]]
[1] "so long — разг. Пока!"

要摆脱列表字符,请使用unlist;要摆脱尾随空格,请使用trimws

【讨论】:

  • 像'so long — разг这样的字符串。 Пока!被修剪为'so long — разг'。有什么想法吗?
  • 好吧,现在它对我来说工作得很好,尽管我不知道它是如何工作的哈哈。模式是.*?—.*?[^A-z]+
  • 感谢您的接受。不过,我对正确的解决方案有了第二个想法,并提出了这个更好的解决方案。注意:[A-z][A-Za-z]相同!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-21
  • 1970-01-01
  • 2020-12-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-27
相关资源
最近更新 更多