有人知道为什么我的正则表达式的第一部分不是';你不是在用Python吗?
我在RegexBuddy中测试了这个正则表达式有人知道为什么我的正则表达式的第一部分不是';你不是在用Python吗?,python,regex,Python,Regex,我在RegexBuddy中测试了这个正则表达式 ,[A-Z\s]+?,(LA|RO|MU|FE|AV|CA),(ML|FE|MN|FS|UN)?,(\d+/\d+/\d{4})? 它似乎能够完成我需要它完成的任务—捕获一段数据,该数据看起来如下所示: ,粉末,反渗透,毫升,2002年8月19日 ,粉末,反渗透,,,, ,粉末,反渗透,2002年8月19日 ,粉末,反渗透,毫升,, 当我在python字符串中使用它时: r",[A-Z\s]+?,(LA|RO|MU|FE|AV|CA),(ML|F
,[A-Z\s]+?,(LA|RO|MU|FE|AV|CA),(ML|FE|MN|FS|UN)?,(\d+/\d+/\d{4})?
它似乎能够完成我需要它完成的任务—捕获一段数据,该数据看起来如下所示:
,粉末,反渗透,毫升,2002年8月19日,粉末,反渗透,,,,
,粉末,反渗透,2002年8月19日
,粉末,反渗透,毫升,,
当我在python字符串中使用它时:
r",[A-Z\s]+?,(LA|RO|MU|FE|AV|CA),(ML|FE|MN|FS|UN)?,(\d+/\d+/\d{4})?"
它错过了比赛的第一部分,我的结果是:RO,ML,8/19/2002,或RO,ML,或jusr RO
第一个标记是一个存储为所有大写字母的单词,其中可能有空格(和/或可能还有标点符号,我需要很快加以说明)。如果我删除了空格,它仍然无法捕获它应该捕获的一个单词名称。我错过了一些明显的东西吗?正则表达式的第一部分周围没有捕捉括号。试试正则表达式:
,([A-Z\s]+?),(LA|RO|MU|FE|AV|CA),(ML|FE|MN|FS|UN)?,(\d+/\d+/\d{4})?
#^^ This was [A-Z\s]+?; needs to be ([A-Z\s]+?)
在python中是这样的:
r",([A-Z\s]+?),(LA|RO|MU|FE|AV|CA),(ML|FE|MN|FS|UN)?,(\d+/\d+/\d{4})?"
来自解释器的示例:
>>> import re
>>> r = re.compile(r",[A-Z\s]+?,(LA|RO|MU|FE|AV|CA),(ML|FE|MN|FS|UN)?,(\d+/\d+/\d{4})?")
>>> r.match(",POWDER,RO,ML,8/19/2002").groups()
('RO', 'ML', '8/19/2002')
>>> r = re.compile(r",([A-Z\s]+?),(LA|RO|MU|FE|AV|CA),(ML|FE|MN|FS|UN)?,(\d+/\d+/\d{4})?")
>>> r.match(",POWDER,RO,ML,8/19/2002").groups()
('POWDER', 'RO', 'ML', '8/19/2002')
我不喜欢python,但您只是忘记了使用括号来表示要捕获该部分:
,([A-Z]+)?,(LA | RO | MU | FE | AV | CA),(ML | FE | MN | FS | UN)?,(\d+/\d+/\d{4})?
应该做你想做的事是的。您没有捕获第一组
r",([A-Z\s]+),(LA|RO|MU|FE|AV|CA),(ML|FE|MN|FS|UN)?,(\d+/\d+/\d{4})?"
# ^ ^
顺便说一句,您似乎正在使用正则表达式解析CSV文件。在Python中,已经存在一个。是的,您错过了分组括号:
>>> s = ",POWDER,RO,ML,8/19/2002"
>>> pat = r",([A-Z\s]+?),(LA|RO|MU|FE|AV|CA),(ML|FE|MN|FS|UN)?,(\d+/\d+/\d{4})?"
>>> re.match(pat, s).groups()
('POWDER', 'RO', 'ML', '8/19/2002')
谢谢大家。只要一个人的错误被指出,它似乎总是显而易见的。我希望我能接受这三个答案。Thx,我会查看csv模块,看看我是否能利用它来完成我需要做的事情。可悲的是,这只是用python向自己证明我的脚本可以工作,我需要用Java或Groovy实现它,所以工作中没有人会感到奇怪。