Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有人知道为什么我的正则表达式的第一部分不是';你不是在用Python吗?_Python_Regex - Fatal编程技术网

有人知道为什么我的正则表达式的第一部分不是';你不是在用Python吗?

有人知道为什么我的正则表达式的第一部分不是';你不是在用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

我在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|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实现它,所以工作中没有人会感到奇怪。