regex,以从字面上匹配缩写的字符



我是regex的新手,我想得到一些帮助。所以我在下面有一个字符串,我想让我的正则表达式与首字母缩略词的第一个字符匹配,字面上+任何字符[a-z],次数不限,但只匹配第一个字符。对于其余的角色,我只想按原样匹配它们。如果您能为我的正则表达式行更改内容以实现这一点提供任何帮助,我们将不胜感激。

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)-第1组捕获关键字
  • b/(?!w)-字界(右字界(
  • .+?-换行符字符以外的任何1+个字符,尽可能少
  • b-字边界
  • (n[a-z]*s*USA)-第2组:n(第一个字符(,然后是任何0+小写ASCII字母、0+空格和key字符串的其余部分
  • (?!S)-右侧空白边界(您可以考虑在此处再次使用(?!w)(

最新更新