问题描述
|
我没有做太多的RegEx,所以我在为这个脚本编写好的RegEx时遇到了问题。
以下是一些示例输入:
文件:ASoi4jgt0w9efcZXNDOFzsdpfoasdf-zGRnae4iwn2,文件:90jfa9_189204hsfiansdIASDNF,pdf:a09srjbZXMgf9oe90rfmasasgjm4-ab,电子表格:ASr0gk0jsdfPAsdfn
这是我想在每个示例中匹配的内容:
ASoi4jgt0w9efcZXNDOFzsdpfoasdf-zGRnae4iwn2、90jfa9_189204hsfiansdIASDNF,a09srjbZXMgf9oe90rfmasasgjm4-ab,ASr0gk0jsdfPAsdfn
什么是最好的,也许是最简单的正则表达式?谢谢!
解决方法
.*:(.*)
应该让您将字符串中最后一个冒号之后的所有内容作为第一组(或第二组,如果您将\'match everything \'组算在内)的值。
另一种选择是[^:]*$
,它使您将字符串末尾的所有字符一直到但不包括字符串中最后一个冒号的字符。
, 使用如下所示的内容:
([^:]*)(,|$)
并获得第一组。如果最后一个需要,可以使用非捕获组(?:ABC)
。这也假设值本身可以具有,
作为字符之一。
我认为像“ 5”之类的答案不起作用。它将匹配整个字符串。
, (.*)\\:(.*)
并采取第二个捕获组...
, 最简单的似乎是[^:]*:([^,]*)(?:,|$)
。
那就是找到一个东西,它有一个东西(可能没有),直到冒号,然后是冒号,再到不包括逗号(匹配的东西),直到逗号或行尾的东西。
请注意,最后使用非捕获组来封装交替。出现的唯一捕获组是您希望使用的捕获组。
因此在python中:
import re
exampStr = \"document:ASoi4jgt0w9efcZXNDOFzsdpfoasdf-zGRnae4iwn2,file:90jfa9_189204hsfiansdIASDNF,pdf:a09srjbZXMgf9oe90rfmasasgjm4-ab,spreadsheet:ASr0gk0jsdfPAsdfn\"
regex = re.compile(\"[^:]*:([^,|$)\")
result = regex.findall(exampStr)
print result
#
# Result:
#
# [\'ASoi4jgt0w9efcZXNDOFzsdpfoasdf-zGRnae4iwn2\',\'90jfa9_189204hsfiansdIASDNF\',\'a09srjbZXMgf9oe90rfmasasgjm4-ab\',\'ASr0gk0jsdfPAsdfn\']
#
#
一个很好的介绍是在:http://www.regular-expressions.info/tutorial.html。