我是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)
(