python - 正则表达式(python):如何匹配某些查询
问题描述
我有一个字符串列表,其中每一行都是这样的:
1.alfa.america.game
我需要用不同的参数查询这一行,如果匹配,打印出来。在这个例子中,我得到了所有有“1”和“db”的行,但也得到了其他的,即:
11.alfa.cad.base
我不想得到带有“11”或“db”的行,只有完全匹配。这就是我所做的:
代码:
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,则不应为组或字符类使用量词
- 重复捕获组
()+
将捕获最后一次迭代的值,您希望将组值作为一个整体,以便您可以重复字符类 - 由于字符串喜欢
1
和db
是硬编码的,因此您实际上不必捕获它们
考虑到这一点,您可以改用 2 个捕获组。当您使用re.match时,您可以在开头省略锚点并使用断言字符串的结尾\Z
1\.db\.([a-z]+)+\.([a-z]+)\Z
^ ^ ^
Dot group 1 group 2
q = re.compile(ID+r'\.'+task+'\.(['+environment+']+)+\.(['+location+']+)\Z', flags=re.I)
推荐阅读
- spring-boot - 如何使用 Spring Boot + Spring Security + KeyCloak 验证每个请求?
- docker - 如何在 ubuntu 上使用 docker-compose 应用程序路由流量?
- python - Pandas groupby,如何编辑结果
- android - 如何使用recycleview创建多个按钮
- android - 我可以让 iOS/Android 应用程序“响铃”以强制用户响应推送通知吗?
- python - 有人可以用 Python 解释“diff = \ floor(a - b))”吗?
- html - 我怎样才能解决这些错误?
- python - 在 R 或 Python 中打开 Stata 16 .dta?
- c - 在 Windows 控制台中打印 utf8 wchar_t
- mysql - 如何在几分钟内将 HH:MM:SS 格式的 varchar 转换为 int 值。使用 mysql