regex - 如何选择具有自定义单词边界的第一个字符?
问题描述
我用这样的一系列词测试用例:
{
input: "Halley's Comet",
expected: "HC",
},
{
input: "First In, First Out",
expected: "FIFO",
},
{
input: "The Road _Not_ Taken",
expected: "TRNT",
},
我想用一个正则表达式来匹配这些单词的所有第一个字母,避免 char: "_" 被匹配为第一个字母并计算单词中的单引号。
目前,我有这个正则表达式处理 pcre 语法,但不使用 Go regexp 包:(?<![a-zA-Z0-9'])([a-zA-Z0-9'])
我知道 Go 不支持环视,但我正在寻找一种好方法来做到这一点。
我还使用这个函数来获取所有字符串的数组:re.FindAllString(s, -1)
感谢您的帮助。
解决方案
Something that plays with character classes and word boundaries should suffice:
\b_*([a-z])[a-z]*(?:'s)?_*\b\W*
Usage:
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile(`(?i)\b_*([a-z])[a-z]*(?:'s)?_*\b\W*`)
fmt.Println(re.ReplaceAllString("O'Brian's dog", "$1"))
}
推荐阅读
- vscode-python - Vscode python调试:如何隐藏未使用的东西?
- haskell - Haskell中可变非整数类型的可变列表
- scala - 从 String 或 InputStream 读取的 Spawn 进程
- asp.net-mvc - Asp.Net Mvc - “已完成”附加到我的操作名称并给出 InvalidOperationException 无法找到名为“XXXCompleted”的方法
- c++ - C++ 中的扩展 ASCII
- asp.net-core - 取决于通过 OData 查询的当前用户的计算属性
- c# - 是否可以调用避免 gc 的动态结构类型函数?
- python - 如何显示多对一关系的内容
- python - Pandas - 有效地迭代 DataFrame 行并按列名获取值
- python - Python - 仅在 Selenium 中不存在的元素