|

楼主 |
发表于 2020-3-14 13:56:04
|
显示全部楼层
本帖最后由 hrp 于 2020-3-14 14:19 编辑
我去百度了各种先行后发零宽断言,写了一个,勉强符合要求,但是还有问题
不知道为何:
- from re import findall
- # pat = r"(?<=^|\b)\S+?(?=\s|$)" # 不支持变长(|左右字符长度不相等)后发零宽断言,只能用\b替代\s以保证长度相等,但符号开头的字符串比如以下的%ascn匹配不到%。
- pat = r"(?<![0-9a-zA-Z~`!@#$%^&*()_+-/=.\|*])\S+?(?=\s|$)" # 暴力解决 :)
- string1 = 'abc de.f g hijk6'
- string2 = 'lmn'
- string3 = 'aca% 21474836 476.-61 %ascn'
- print(findall(pat, string1))
- print(findall(pat, string2))
- print(findall(pat, string3))
- # ['abc', 'de.f', 'g', 'hijk6']
- # ['lmn']
- # ['aca%', '21474836', '476.-61', '%ascn']
复制代码 |
|