You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用正则表达式和stringr删除文本中所有符合规则的疑问句

正则写法说明

你之前的正则^[A-Z].+\?失效有两个核心原因:

  1. 开头的^锚定了整个字符串的起始位置,只能匹配整串开头的内容,无法匹配中间位置出现的疑问句
  2. .+是贪婪匹配规则,会尽可能向后匹配最长的符合规则的内容,直接吃到整串最后一个问号的位置,因此会把中间的回答内容也包含进匹配结果。

适配你需求的正则有两种常用写法:

  1. 非贪婪匹配写法:\b[A-Z].*?\?
  • \b 匹配单词边界,保证匹配到的大写字母是句子的首字母
  • [A-Z] 匹配句首的大写英文字母
  • .*? 非贪婪匹配任意字符,尽可能短的匹配内容
  • \? 匹配疑问句结尾的问号
  1. 排除型字符集写法(性能更稳定,不会出现非贪婪匹配的偶发边界问题):\b[A-Z][^?]*\?
  • 和上面的差异是用[^?]*匹配所有非问号的字符,天然会停在第一个出现的问号位置,不需要额外配置非贪婪规则。

R stringr 实现示例

提取所有疑问句

library(stringr)

raw_str <- "This is a question? This is an answer This is another question? This is another answer."
# 注意R里转义符要写双反斜杠
questions <- str_extract_all(raw_str, "\\b[A-Z][^?]*\\?")[[1]]
print(questions)
# 输出结果:[1] "This is a question?"        "This is another question?"

删除所有疑问句

如果要删除匹配到的疑问句,还可以在正则末尾加\\s?匹配问号后面的空格,避免删除后留下多余的空白:

result <- str_remove_all(raw_str, "\\b[A-Z][^?]*\\?\\s?")
print(result)
# 输出结果:"This is an answer This is another answer."

内容的提问来源于stack exchange,提问作者Nina van Bruggen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 22:45:06