在python中,我试图通过将用户定义的regex表达式解析为自定义regex表达式来实现它。然后将此自定义正则表达式应用于指定空格的字符串。其思想是在第二列上应用用户regex,而不使用for循环。你知道吗
Stream //streams/sys_util mainline none 'sys_util'
Stream //streams/gta mainline none 'gta'
Stream //streams/gta_client development //streams/gta_cdevelop 'gta_client'
Stream //streams/gta_develop development //streams/gta 'gta_develop'
Stream //streams/gta_infrastructure development //streams/gta 'gta_infrastructure'
Stream //streams/gta_server development //streams/gta_cdevelop 'gta_server'
Stream //streams/0222_ImplAlig1.0 task none '0222_ImplAlig1.0'
Stream //streams/0377_kzo_the_wart task //streams/applications_int '0377_tta'
预期输出应为
//streams/gta
//streams/gta_client
//streams/gta_develop
//streams/gta_infrastructure
//streams/gta_server
这是我的密码
import re
mystring = "..."
match_rgx = r'Stream\s(\/\/streams\/gta.*)(?!\s)'
result = re.findall(match_rgx, mystring, re.M)
注意:第一个括号内的表达式不能更改(因为它是从用户输入解析的),所以\/\/streams\/gta.*
必须保持原样。你知道吗
如何改善负面展望以获得预期结果?你知道吗
您可以使用:
默认情况下,操作符*是贪婪的,因此它将尝试捕获尽可能多的文本(例如:“//streams/gta mainline none”将匹配没有?)。但你只想要第二列,所以,用?操作符变得不贪婪,并在最小模式处停止,这里是在第一次出现\s(“//streams/gta”)时。你知道吗
希望这是清楚的,看看文档(https://docs.python.org/2/library/re.html#contents-of-module-re),如果不是。你知道吗
顺便说一句,你不必转义/,它不是一个特殊的字符。 如果不使用^或$,那么使用re.M标志是没有用的。你知道吗
编辑:由于你的编辑,如果你不想赶上发展,一些信息成为无用的。你知道吗
编辑2:没有看到你不想改变模式。在这种情况下,只需执行以下操作:
编辑3:见评论。你知道吗
在https://regex101.com/上测试,这应该可以完成所有第2列的工作:
仅适用于GTAs第2列:
对于一行,它就像(第二列):
Gta仅适用于1条生产线:
相关问题 更多 >
编程相关推荐