Regex(python):如何匹配某个查询



我有一个字符串列表,其中每一行都是这样的:

1.alfa.america.game

我需要用不同的参数查询这一行,如果匹配,则打印它。在这个例子中,我得到了所有具有";1〃;以及";db";,但也得到其他,即:

11.alfa.cad.base

我不想用"11〃;也不是";d.b";,只有完全匹配。这就是我所做的:

代码:

ID = "1"
task = "db"
environment = "a-z"
location = "a-z"
fullString = "1.alfa.america.game" #this string can change
q = re.compile(r'(['+ID+'])+.(['+task+'])+.(['+environment+'])+.(['+location+'])+.', flags=re.I | re.X)
m = q.match(fullString)
if m:
print (fullString)

提前感谢!

关于模式的一些注意事项,其中一些已经在注释中提到。

对于当前变量,模式将是

([1])+.([db])+.([a-z])+.([a-z])+.
  • 这里,.匹配任何字符,而不是仅匹配一个点
  • 如果不想匹配11,则不应为组或字符类使用量词
  • 重复捕获组()+将捕获上一次迭代的值,您希望将组值作为一个整体,以便可以重复字符类
  • 由于像1db这样的字符串是硬编码的,所以实际上不必捕获它们

考虑到这一点,您可以使用2个捕获组。在使用re.match时,可以省略开头的锚点,并使用Z断言字符串的末尾

1.db.([a-z]+)+.([a-z]+)Z
^    ^          ^
Dot  group 1    group 2

Regex演示

q = re.compile(ID+r'.'+task+'.(['+environment+']+)+.(['+location+']+)Z', flags=re.I)

相关内容

  • 没有找到相关文章

最新更新