2007年11月26日 星期一 14:58
ÎÒÏëÆ¥ÅäÕÒµ½º¯Êý£¬ÏÂÃæÊǺ¯Êý¿ÉÄܵÄÐÎʽ£º virtual HRUSULT int Func(int param1, int param2, int param3); ÏÂÃæÊÇÎÒµÄÕýÔò±í´ïʽ£º (\w+\s*)+\((\s*\w+(\s+\w+)?,*)*\) ËäÈ»¿ÉÒÔÓ㬵«ÊÇ·µ»ØµÄgroup²»ÊÇÎÒÏëÒªµÄ£¬ÎÒÏ£ÍûµÃµ½·µ»ØÀàÐÍ£ºint£¬º¯ÊýÃû£ºFunc£¬²ÎÊýÁÐ±í£º["int param1", "int param2", "int param3"]£¬µ«ÊǺÃÏñgroupÖ»ÄÜ·µ»Ø×îºóÒ»¸öÆ¥Å䣬¶ø֮ǰµÄÆ¥ÅäÎÞ·¨µÃµ½¡£ »òÕßÕâô˵£¬¿ªÊ¼µÄ(\w+\s*)+ÄÜÆ¥Åävirtual HRUSULT int Func£¬µ«ÊÇÈ´Ö»Äܵõ½Func£¬¶øÇ°ÃæµÄint¡¢HRUSULT¡¢virtualµÈ¶¼ÊÇÎÞ·¨»ñµÃµÄ¡£ ÇëÎÊÓÐʲô°ì·¨¿ÉÒԵõ½ÒÔÏÂÄÚÈÝ£º ·µ»ØÀàÐÍ£ºint£¬º¯ÊýÃû£ºFunc£¬²ÎÊýÁÐ±í£º["int param1", "int param2", "int param3"] лл¡£ ^__^ -------------- 下一部分 -------------- Ò»¸öHTML¸½¼þ±»ÒƳý... URL: http://python.cn/pipermail/python-chinese/attachments/20071126/c312d222/attachment.html
2007年11月26日 星期一 19:26
把int,函数名:Func,参数列表分三个组,然后用.group(1), .group(2) .group(3) 分别取出来。关键在你的正则表达式分组。 On 11/26/07, clfff. peter <clfff.peter at gmail.com> wrote: > 我想匹配找到函数,下面是函数可能的形式: > virtual HRUSULT int Func(int param1, int param2, int param3); > 下面是我的正则表达式: > (\w+\s*)+\((\s*\w+(\s+\w+)?,*)*\) > 虽然可以用,但是返回的group不是我想要的,我希望得到返回类型:int,函数名:Func,参数列表:["int param1", "int > param2", "int param3"],但是好像group只能返回最后一个匹配,而之前的匹配无法得到。 > 或者这么说,开始的(\w+\s*)+能匹配virtual HRUSULT int > Func,但是却只能得到Func,而前面的int、HRUSULT、virtual等都是无法获得的。 > 请问有什么办法可以得到以下内容: > 返回类型:int,函数名:Func,参数列表:["int param1", "int param2", "int param3"] > 谢谢。 > ^__^ >
2007年11月26日 星期一 22:10
On Nov 26, 2007 2:58 PM, clfff. peter <clfff.peter在gmail.com> wrote: > 我想匹配找到函数,下面是函数可能的形式: > virtual HRUSULT int Func(int param1, int param2, int param3); > 下面是我的正则表达式: > (\w+\s*)+\((\s*\w+(\s+\w+)?,*)*\) > 虽然可以用,但是返回的group不是我想要的,我希望得到返回类型:int,函数名:Func,参数列表:["int param1", "int > param2", "int param3"],但是好像group只能返回最后一个匹配,而之前的匹配无法得到。 > 或者这么说,开始的(\w+\s*)+能匹配virtual HRUSULT int 是这样的,你写(\w+\s*)+,这样,那对括号里实际上会match到4组, 分别是'virtual ', 'HRUSULT ', 'int '和'Func',这时,返回的结果是最后一组,即那个'Func'。 如果你想得到match到的整个(\w+\s*)+,那你要在外面加个括号。由于你并不想得到里面每一个单词,所以 里面那个括号是匿名(non-group)的。所以,你应该这样写:((?:\w+\s*)+) 详细解释请见python手册的re模块的说明。 > Func,但是却只能得到Func,而前面的int、HRUSULT、virtual等都是无法获得的。 > 请问有什么办法可以得到以下内容: > 返回类型:int,函数名:Func,参数列表:["int param1", "int param2", "int param3"] > 谢谢。 > ^__^ 这样的程序不知道是不是你想要的: a = r'virtual HRUSULT int Func(int param1, int param2, int param3); ' r = re.compile(r'(\w+)\s+(\w+)\s*\((.*)\)') print r.findall(a) 输出的结果是一个列表,列表里的每个元素是一个元组,每个元组里有3个元素,分别是返回类型,函数名和参数的列表。 其中,参数的列表你要自己split(',')一下。 -- Best Regards, Leo Jay
2007年11月27日 星期二 11:43
ËäÈ»ÄãµÄ·½·¨²»ÊǺÜÍêÃÀ£¬²»¹ýÌáʾÁËÒ»µã£¬¾ÍÊÇ£º 1¡·²»Ó¦¸ÃÍêÈ«ÒÀ¿¿ÕýÔò£¬¶øÓ¦¸Ã»ìºÏ¸÷ÖÖ·½·¨£» 2¡·»òÕß²»Ó¦¸ÃÒÀ¿¿Ò»¸öÕýÔò£¬¶øÊǷֳɼ¸²½£¬Ã¿Ò»²½ÖÐÓÐÒ»¸öÕýÔò£¬ÕâÑùÒ»²ã²ãµÄ½âÎö¡£ ²»ÖªµÀ´ó¼ÒÔÚʵ¼ÊÏîÄ¿ÖÐÊDz»ÊÇÕâÑù×öµÄ£¿ ¸øµã½¨Òé¡£ »¹ÓиöÎÊÌ⣺ "ËùÒÔ£¬ÄãÓ¦¸ÃÕâÑùд£º((?:\w+\s*)+)"£¬ÆäÖÐ(?:..)µÄ½âÊÍÊÇ£ºNo-Capturing Parenthesis£¬²»Ì«Ã÷°×£¬¶øÇÒÓÐûÓÐËüºÃÏñûʲôÇø±ðѽ¡£Äܲ»ÄܽâÊÍÏ¡£ лл¡£^__^ ÔÚ07-11-26£¬Leo Jay <python.leojay在gmail.com> дµÀ£º > > On Nov 26, 2007 2:58 PM, clfff. peter <clfff.peter在gmail.com> wrote: > > ÎÒÏëÆ¥ÅäÕÒµ½º¯Êý£¬ÏÂÃæÊǺ¯Êý¿ÉÄܵÄÐÎʽ£º > > virtual HRUSULT int Func(int param1, int param2, int param3); > > ÏÂÃæÊÇÎÒµÄÕýÔò±í´ïʽ£º > > (\w+\s*)+\((\s*\w+(\s+\w+)?,*)*\) > > ËäÈ»¿ÉÒÔÓ㬵«ÊÇ·µ»ØµÄgroup²»ÊÇÎÒÏëÒªµÄ£¬ÎÒÏ£ÍûµÃµ½·µ»ØÀàÐÍ£ºint£¬º¯ÊýÃû£ºFunc£¬²ÎÊýÁÐ±í£º["int param1", "int > > param2", "int param3"]£¬µ«ÊǺÃÏñgroupÖ»ÄÜ·µ»Ø×îºóÒ»¸öÆ¥Å䣬¶ø֮ǰµÄÆ¥ÅäÎÞ·¨µÃµ½¡£ > > »òÕßÕâô˵£¬¿ªÊ¼µÄ(\w+\s*)+ÄÜÆ¥Åävirtual HRUSULT int > > ÊÇÕâÑùµÄ£¬Äãд(\w+\s*)+£¬ÕâÑù£¬ÄǶÔÀ¨ºÅÀïʵ¼ÊÉÏ»ámatchµ½4×飬 > ·Ö±ðÊÇ'virtual ', 'HRUSULT ', 'int 'ºÍ'Func'£¬Õâʱ£¬·µ»ØµÄ½á¹ûÊÇ×îºóÒ»×飬¼´ÄǸö'Func'¡£ > Èç¹ûÄãÏëµÃµ½matchµ½µÄÕû¸ö(\w+\s*)+£¬ÄÇÄãÒªÔÚÍâÃæ¼Ó¸öÀ¨ºÅ¡£ÓÉÓÚÄã²¢²»ÏëµÃµ½ÀïÃæÿһ¸öµ¥´Ê£¬ËùÒÔ > ÀïÃæÄǸöÀ¨ºÅÊÇÄäÃû(non-group)µÄ¡£ËùÒÔ£¬ÄãÓ¦¸ÃÕâÑùд£º((?:\w+\s*)+) > Ïêϸ½âÊÍÇë¼ûpythonÊÖ²áµÄreÄ£¿éµÄ˵Ã÷¡£ > > > Func£¬µ«ÊÇÈ´Ö»Äܵõ½Func£¬¶øÇ°ÃæµÄint¡¢HRUSULT¡¢virtualµÈ¶¼ÊÇÎÞ·¨»ñµÃµÄ¡£ > > ÇëÎÊÓÐʲô°ì·¨¿ÉÒԵõ½ÒÔÏÂÄÚÈÝ£º > > ·µ»ØÀàÐÍ£ºint£¬º¯ÊýÃû£ºFunc£¬²ÎÊýÁÐ±í£º["int param1", "int param2", "int param3"] > > лл¡£ > > ^__^ > > ÕâÑùµÄ³ÌÐò²»ÖªµÀÊDz»ÊÇÄãÏëÒªµÄ£º > > a = r'virtual HRUSULT int Func(int param1, int param2, int param3); ' > r = re.compile(r'(\w+)\s+(\w+)\s*\((.*)\)') > print r.findall(a) > > Êä³öµÄ½á¹ûÊÇÒ»¸öÁÐ±í£¬ÁбíÀïµÄÿ¸öÔªËØÊÇÒ»¸öÔª×飬ÿ¸öÔª×éÀïÓУ³¸öÔªËØ£¬·Ö±ðÊÇ·µ»ØÀàÐÍ£¬º¯ÊýÃûºÍ²ÎÊýµÄÁÐ±í¡£ > ÆäÖУ¬²ÎÊýµÄÁбíÄãÒª×Ô¼ºsplit(',')һϡ£ > > -- > Best Regards, > Leo Jay > _______________________________________________ > python-chinese > Post: send python-chinese在lists.python.cn > Subscribe: send subscribe to python-chinese-request在lists.python.cn > Unsubscribe: send unsubscribe to python-chinese-request在lists.python.cn > Detail Info: http://python.cn/mailman/listinfo/python-chinese -------------- 下一部分 -------------- Ò»¸öHTML¸½¼þ±»ÒƳý... URL: http://python.cn/pipermail/python-chinese/attachments/20071127/4dd2508f/attachment.htm
2007年11月27日 星期二 11:59
On Nov 27, 2007 11:43 AM, clfff. peter <clfff.peter在gmail.com> wrote: > 虽然你的方法不是很完美,不过提示了一点,就是: > 1》不应该完全依靠正则,而应该混合各种方法; > 2》或者不应该依靠一个正则,而是分成几步,每一步中有一个正则,这样一层层的解析。 > 不知道大家在实际项目中是不是这样做的? > 给点建议。 用最好理解的方式解决问题。跟分几步没关系,你有一步解决又好懂的方法就用一步解决的方法。如果没有,那就分多步。 > > 还有个问题: > "所以,你应该这样写:((?:\w+\s*)+)",其中(?:..)的解释是:No-Capturing > Parenthesis,不太明白,而且有没有它好像没什么区别呀。能不能解释下。 > 怎么会没区别,你自己试试就知道了: >>> a = r'virtual HRUSULT int Func' >>> re.findall(r'((\w+\s*)+)', a) [('virtual HRUSULT int Func', 'Func')] >>> re.findall(r'((?:\w+\s*)+)', a) ['virtual HRUSULT int Func'] >>> 默认情况下,所有的圆括号都组成一个group,但有的时候,我们使用圆括号并不是想 让它放到group里,只是想让后面的那个'+'号作用的范围是\w+\s*,所以要让这个括号不参与 group,这就是(?:...)的用处。 > 谢谢。^__^ > > -- Best Regards, Leo Jay
2007年11月28日 星期三 10:59
·Ç³£Çå³þ£¬·Ç³£¸Ðл¡£¹þ¹þ¹þ ÔÚ07-11-27£¬Leo Jay <python.leojay在gmail.com> дµÀ£º > > On Nov 27, 2007 11:43 AM, clfff. peter <clfff.peter在gmail.com> wrote: > > ËäÈ»ÄãµÄ·½·¨²»ÊǺÜÍêÃÀ£¬²»¹ýÌáʾÁËÒ»µã£¬¾ÍÊÇ£º > > 1¡·²»Ó¦¸ÃÍêÈ«ÒÀ¿¿ÕýÔò£¬¶øÓ¦¸Ã»ìºÏ¸÷ÖÖ·½·¨£» > > 2¡·»òÕß²»Ó¦¸ÃÒÀ¿¿Ò»¸öÕýÔò£¬¶øÊǷֳɼ¸²½£¬Ã¿Ò»²½ÖÐÓÐÒ»¸öÕýÔò£¬ÕâÑùÒ»²ã²ãµÄ½âÎö¡£ > > ²»ÖªµÀ´ó¼ÒÔÚʵ¼ÊÏîÄ¿ÖÐÊDz»ÊÇÕâÑù×öµÄ£¿ > > ¸øµã½¨Òé¡£ > > ÓÃ×îºÃÀí½âµÄ·½Ê½½â¾öÎÊÌâ¡£¸ú·Ö¼¸²½Ã»¹Øϵ£¬ÄãÓÐÒ»²½½â¾öÓֺö®µÄ·½·¨¾ÍÓÃÒ»²½½â¾öµÄ·½·¨¡£Èç¹ûûÓУ¬ÄǾͷֶಽ¡£ > > > > > »¹ÓиöÎÊÌ⣺ > > "ËùÒÔ£¬ÄãÓ¦¸ÃÕâÑùд£º((?:\w+\s*)+)"£¬ÆäÖÐ(?:..)µÄ½âÊÍÊÇ£ºNo-Capturing > > Parenthesis£¬²»Ì«Ã÷°×£¬¶øÇÒÓÐûÓÐËüºÃÏñûʲôÇø±ðѽ¡£Äܲ»ÄܽâÊÍÏ¡£ > > > > Ôõô»áûÇø±ð£¬Äã×Ô¼ºÊÔÊÔ¾ÍÖªµÀÁË£º > >>> a = r'virtual HRUSULT int Func' > >>> re.findall(r'((\w+\s*)+)', a) > [('virtual HRUSULT int Func', 'Func')] > >>> re.findall(r'((?:\w+\s*)+)', a) > ['virtual HRUSULT int Func'] > >>> > > ĬÈÏÇé¿öÏ£¬ËùÓеÄÔ²À¨ºÅ¶¼×é³ÉÒ»¸ögroup£¬µ«ÓеÄʱºò£¬ÎÒÃÇʹÓÃÔ²À¨ºÅ²¢²»ÊÇÏë > ÈÃËü·Åµ½groupÀֻÊÇÏëÈúóÃæµÄÄǸö'+'ºÅ×÷Óõķ¶Î§ÊÇ\w+\s*£¬ËùÒÔÒªÈÃÕâ¸öÀ¨ºÅ²»²ÎÓë > group£¬Õâ¾ÍÊÇ(?:...)µÄÓô¦¡£ > > > лл¡£^__^ > > > > > > > -- > Best Regards, > Leo Jay > _______________________________________________ > python-chinese > Post: send python-chinese在lists.python.cn > Subscribe: send subscribe to python-chinese-request在lists.python.cn > Unsubscribe: send unsubscribe to python-chinese-request在lists.python.cn > Detail Info: http://python.cn/mailman/listinfo/python-chinese -------------- 下一部分 -------------- Ò»¸öHTML¸½¼þ±»ÒƳý... URL: http://python.cn/pipermail/python-chinese/attachments/20071128/84857e84/attachment.htm
Zeuux © 2025
京ICP备05028076号