例如这是我的方法
import re
text = "ONE:;TWO:,,d,-;THREE:fsdfsd;FOUR:43879293847;FIVE:dsa. dsa, 56;SIX: ;SEVEN:,,,;EIGHT:--;"
def parser(string):
prepare = []
string = list(filter(None, string.split(";")))
for i in string:
s = i.split(":")
j = len(list(filter(None, s)))
if j == 2 and re.match("^[A-Za-z0-9_-]*$",s[1]):
prepare.append(i)
final = ";".join(prepare) + ";"
return final
print(parser(text))
它只返回THREE
, FOUR
and EIGTH
,但我也想包含TWO
andFIVE
和排除EIGTH
。也许这不是实现我的目标的最佳方法,但如何将TWO
and包含FIVE
在其中而不包含SEVEN
and EIGTH
?
先感谢您。
对于现有代码,您可以使用 re.search 和字符类检查第二部分是否包含数字或数字
[A-Za-z0-9]
输出
作为单个正则表达式的替代方案:
解释
[\w .,-]+
匹配任何列出的字符 1 次以上:
匹配冒号[\w .,-]*
匹配 0+ 次任何列出的字符[^\W_]
匹配不包括下划线的单个单词字符[\w .,-]*;
匹配 0+ 次任何列出的字符,后跟分号查看正则表达式演示和Python 演示
例子:
输出