r - 删除 1) 开始和结束模式和 2) 如果没有结束模式、开始模式和结束之间的字符
问题描述
使用两个调用链来解决问题gsub
- 出于好奇,我想知道是否有更短的正则表达式来实现我想要实现的目标。(使用Remove the letters between two patterns of strings in R 的解决方案)
我想删除某个模式出现之间的所有字符,或者 - 如果没有“结束模式”,则在“开始”模式和结束之间。
foostring <- c("First test *** no asterisks at the end",
"Second test *** asterisks in the middle *** something different",
"Third test *** more than one asterisk *** something different *** second asterisk ***",
"Fourth test *** asterisks followed by a special character ***_something different")
# desired output with chain of gsubs
gsub("\\*{3}.*$", "", gsub("\\*{3}.*?\\*{3}", "", foostring))
#> [1] "First test " "Second test something different"
#> [3] "Third test something different " "Fourth test _something different"
解决方案
您可以使用
gsub("\\*{3}.*?(?:\\*{3}|$)", "", foostring)
查看R 在线演示
TRE 正则表达式意味着:
\*{3}
- 三个星号.*?
- 尽可能少的任何零个或多个字符(?:\\*{3}|$)
- 非捕获组匹配\*{3}
- 三个星号|
- 或者$
- 字符串结束。
推荐阅读
- node.js - 带有自定义标头和声明的 jsonwebtoken
- python - 使用def函数和excel计算每条记录的连续数字
- networking - DPC_WATCHDOG_VIOLATION 蓝屏,spilock 等待
- node.js - 禁用节点 REPL 预评估?
- json - 检查列表中的字典元素(来自 json 响应)
- c# - Richtextbox 中的文本在选择之外应用文本装饰
- python - 如何制作不跨服务器狙击的狙击命令(discord.py)
- node.js - Mongoose:填充相关值的数组
- python - 在 Python 中实现复杂值的离散傅里叶变换的正确方法是什么?
- python - Pandas.read_html 仅获取 html 表的标题