python - 正则表达式从字面上匹配缩写的字符
问题描述
我是正则表达式的新手,我需要一些帮助。所以我在下面有一个字符串,我想让我的正则表达式匹配首字母缩写词的第一个字符 + 任何字符 [az] 无限次,但只匹配第一个字符。对于其余的角色,我想按原样匹配它们。任何有关更改我的正则表达式行以实现此目的的帮助,将不胜感激。
import re
s = 'nUSA stands for northern USA'
x = (f'({"nUSA"}).+?({" ".join( t[0] + "[a-z]" + t[1:] for t in "nUSA")})(?: )')
print(x)
out: (nUSA).+?(n[a-z]+ U[a-z]+ S[a-z]+ A[a-z]+)(?: )
我想用我的正则表达式行实现类似于下面的模式,以便它可以匹配美国北部。
(nUSA).+?(n[a-z]+ U + S + A)(?: )
而不是我得到的
(nUSA).+?(n[a-z]+ U[a-z]+ S[a-z]+ A[a-z]+)(?: )
我希望它适用于任何任意文本,而不仅仅是特定文本。我不确定我是否正确表达了我的问题。
解决方案
您可以使用
import re
s = 'nUSA stands for northern USA'
key='nUSA'
x = rf'\b({key})\b.+?\b({key[0]}[a-z]*\s*{key[1:]})(?!\S)'
# => print(x) => \b(nUSA)\b.+?\b(n[a-z]*\s*USA)(?!\S)
# Or, if the key can contain special chars at the end:
# x = rf'\b({re.escape(key)})(?!\w).+?(?<!\w)({re.escape(key[0])}[a-z]*\s*{re.escape(key[1:])})(?!\S)'
print(re.findall(x, s))
# => [('nUSA', 'northern USA')]
请参阅Python 演示。生成的正则表达式看起来像\b(nUSA)\b.+?\b(n[a-z]*\s*USA)(?!\S)
,请参阅它的演示。细节:
\b
- 单词边界(nUSA)
- 第一组捕捉关键词\b
/(?!\w)
- 单词边界(右手单词边界).+?
- 尽可能少的除换行符之外的任何 1+ 字符\b
- 单词边界(n[a-z]*\s*USA)
- 第 2 组:(n
第一个字符),然后是任何 0+ 个小写 ASCII 字母、0+ 个空格和key
字符串的其余部分。(?!\S)
- 右侧空白边界(您可以考虑(?!\w)
在此处再次使用)。
推荐阅读
- swift - 在方法中使用类作为泛型类型参数
- javascript - 在所有表单字段不为空后反应启用按钮
- mysql - 8. 0.11 - 安装程序错误 - 验证方法
- angular5 - 如何在 elasticsearch.js 客户端中排除主机中的端口号
- javascript - Javascript用字符串和int对二维数组进行排序
- php - 使用 foreach 循环后数据不会插入数据库
- java - 在 Firebase 中更改数据时更新 ArrayList
- java - 有没有办法使用 listview 显示所有 sqlite 表和内容?
- javascript - 即使没有选中任何复选框,也定义一个数组
- python-3.x - Google Colab(Python、jupyter notebook)终端输入