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

如何用正则表达式匹配首字母按字母表相邻的两个单词?

解决方案

正则表达式本身无法直接进行字符的数值比较(比如判断首字母ASCII值是否相邻),所以需要结合R的字符串处理功能,先提取所有相邻单词对,再过滤出符合条件的结果。

实现代码

library(stringr)

sentences <- c("She likes butter chicken.",
               "He loves mango.",
               "Lara makes nuggets.",
               "We want help.")

# 提取所有相邻的完整单词对
word_pairs <- str_extract_all(sentences, "\\b\\w+\\s+\\w+\\b")

# 过滤首字母按A→Z顺序相邻的单词对
filter_adjacent_pairs <- function(pairs) {
  if (length(pairs) == 0) return(character(0))
  # 拆分每个单词对为两个独立单词
  split_pairs <- str_split(pairs, "\\s+")
  # 提取首字母并统一转为小写
  first_chars <- lapply(split_pairs, function(x) str_to_lower(str_sub(x, 1, 1)))
  # 将首字母转为ASCII码值
  ascii_vals <- lapply(first_chars, function(x) utf8ToInt(x))
  # 判断后一个首字母的ASCII码是否恰好比前一个大1(满足A→Z相邻顺序)
  valid <- sapply(ascii_vals, function(x) x[2] == x[1] + 1)
  pairs[valid]
}

# 对所有句子的单词对应用过滤规则
result <- lapply(word_pairs, filter_adjacent_pairs)
print(result)

代码说明

  • \\b\\w+\\s+\\w+\\b:匹配所有由单个空格分隔的完整相邻单词对,确保匹配的是独立单词而非单词片段。
  • 过滤函数逻辑:
    1. 拆分每个单词对为两个独立单词;
    2. 统一首字母大小写,避免大小写差异影响判断;
    3. 将首字母转为ASCII码值,通过数值比较判断是否相邻;
    4. 返回符合A→Z顺序相邻条件的单词对。

运行结果

[[1]]
[1] "butter chicken"

[[2]]
[1] "loves mango"

[[3]]
[1] "makes nuggets"

[[4]]
character(0)

结果完全符合预期需求。


内容的提问来源于stack exchange,提问作者Grasshopper_NZ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 13:12:14