regex - 用于查找字母字符的前 x 个出现的正则表达式,忽略其他所有内容
问题描述
我正在尝试编写一个正则表达式来匹配字符串中出现的前 2 个字母字符。到目前为止,我还没有达到我想要的结果。
到目前为止,我所做的尝试主要包括尝试对任何匹配A-Za-z
的 ,\w
等进行分组,但每次尝试时,我要么抓住括号、方括号,要么由于两个字母字符之间的空格或符号而被停止。
我不关心字符以外的任何东西,我可以很容易地编写代码,但我真的很想学习如何使用正则表达式来做到这一点。
我的尝试:
[(A-Za-z)]{2}
- 失败,因为它包含()
并且(U
出于某种我无法弄清楚的原因。
[A-z].*[A-z]
- 匹配字符之间的所有内容
[A-z]?[A-z]
- 似乎捕捉到了我想要的一些东西,但不幸的是,在测试#2 中也捕捉到了括号和一些奇怪的行为。
[A-Za-z]{2}
- 捕捉前两个连接的字母字符,但错过任何包含其间的任何内容。
[A-Za-z](?:)[A-Za-z]
- 捕获连接的字母字符,但不捕获拆分的字符。
我认为我的主要问题是我不知道如何让正则表达式忽略两个字母符号之间的任何内容,而不将它们包括在我的匹配中。
我浏览了 wiki、regex101、regexone、regexr、regular-expressions.info 和参考,但我似乎根本无法弄清楚如何做到这一点。我在 Google 的 BigQuery 中使用正则表达式引擎
测试:
USUK
应该完全匹配US
123U456 KUS
应该完全匹配UK
[]() [][(UK]) ( ) [ ] US
应该完全匹配UK
]-u K[
应该完全匹配uK
感谢您花时间帮助我。
解决方案
您可以使用
REGEXP_REPLACE(col, r'^[^A-Za-z]*([A-Za-z])[^A-Za-z]*([A-Za-z]).*', r'\1\2')
查看正则表达式演示
细节
^
- 字符串的开始[^A-Za-z]*
- 0 个或更多字符而不是 ASCII 字母([A-Za-z])
- 第 1 组 (\1
):一个 ASCII 字母[^A-Za-z]*
- 0 个或更多字符而不是 ASCII 字母([A-Za-z])
- 第 2 组 (\2
):一个 ASCII 字母.*
- 字符串的其余部分。
推荐阅读
- javascript - 在 HTML 中绘制表单组
- php - 如何在 GRAV CMS 中编写控制器
- php - 无法使用 Larave Dusk 测试输入类型 datetime-local
- python - 函数内部声明的字典
- php - POST 响应为 null()
- java - Quarkus 测试在本机中失败,因为找不到 DayOfWeek
- input - Angular 7 应用程序,我想做一个 if() 条件来检查从父级传递的 Input() 值
- rust - 如何使用 toml-rs 检查 TOML 中是否存在密钥?
- html - 在 flex 上有两行。我怎样才能使一个相对比另一个大?
- yaml - swagger 不应该有使用 OpenAPI (3.0.0) 的附加属性