Python论坛  - 讨论区

标题:[python-chinese] 正则表达式问题

2005年11月19日 星期六 07:25

makeyunbad makeyunbad at gmail.com
Sat Nov 19 07:25:20 HKT 2005

请看下面代码:

>>> a = ['   d  d', '           d  d']
>>> p = re.compile('\s{3}(\S)*\s*(\S)*')
>>> for i in a:
... 	p.match(i).groups()
...
('d', 'd')
(None, 'd')

我的本意是想要把三个空格打头的项的内容拿出来,即a[0]里面的('d',
'd'),所以用这个正则式\s{3}(\S)*\s*(\S)*,但是a[1]也被匹配了。请问有没有什么方法可以通过正则式把a[1]过滤掉?谢谢。

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年11月19日 星期六 07:54

limodou limodou at gmail.com
Sat Nov 19 07:54:15 HKT 2005

在 05-11-19,makeyunbad<makeyunbad at gmail.com> 写道:
> 请看下面代码:
>
> >>> a = ['   d  d', '           d  d']
> >>> p = re.compile('\s{3}(\S)*\s*(\S)*')
> >>> for i in a:
> ...     p.match(i).groups()
> ...
> ('d', 'd')
> (None, 'd')
>
> 我的本意是想要把三个空格打头的项的内容拿出来,即a[0]里面的('d',
> 'd'),所以用这个正则式\s{3}(\S)*\s*(\S)*,但是a[1]也被匹配了。请问有没有什么方法可以通过正则式把a[1]过滤掉?谢谢。
>

把(\S)*改为(\S)+试试
--
I like python!
My Blog: http://www.donews.net/limodou
NewEdit Maillist: http://groups.google.com/group/NewEdit

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年11月19日 星期六 08:29

makeyunbad makeyunbad at gmail.com
Sat Nov 19 08:29:33 HKT 2005

在 05-11-19,limodou<limodou at gmail.com> 写道:
> 在 05-11-19,makeyunbad<makeyunbad at gmail.com> 写道:
> > 请看下面代码:
> >
> > >>> a = ['   d  d', '           d  d']
> > >>> p = re.compile('\s{3}(\S)*\s*(\S)*')
> > >>> for i in a:
> > ...     p.match(i).groups()
> > ...
> > ('d', 'd')
> > (None, 'd')
> >
> > 我的本意是想要把三个空格打头的项的内容拿出来,即a[0]里面的('d',
> > 'd'),所以用这个正则式\s{3}(\S)*\s*(\S)*,但是a[1]也被匹配了。请问有没有什么方法可以通过正则式把a[1]过滤掉?谢谢。
> >
>
> 把(\S)*改为(\S)+试试
> --

好了,是这样啊,非常感谢。

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年11月19日 星期六 08:46

shhgs shhgs.efhilt at gmail.com
Sat Nov 19 08:46:11 HKT 2005

a1当然匹配了。

我们来看看 \s{3}(\S)*\s*(\S)* 是怎么和 '        dan   derek '匹配的

首先是 \s{3}和最前面的三个空格匹配
然后 (\S)* 什么都不匹配
\s* 和dan前面的八个空格中剩下的五个匹配
(\S)* 和dan 匹配

写正则表达式,越详细越好
你这里知道\s是空格,直接写出来
"   (\S+)\s+(\S+)"

此外,顺便讲一下 (\S)+ 匹配什么,这个我也是运行之后才知道的。不过肯定是写错了。

On 11/18/05, limodou <limodou at gmail.com> wrote:
> 在 05-11-19,makeyunbad<makeyunbad at gmail.com> 写道:
> > 请看下面代码:
> >
> > >>> a = ['   d  d', '           d  d']
> > >>> p = re.compile('\s{3}(\S)*\s*(\S)*')
> > >>> for i in a:
> > ...     p.match(i).groups()
> > ...
> > ('d', 'd')
> > (None, 'd')
> >
> > 我的本意是想要把三个空格打头的项的内容拿出来,即a[0]里面的('d',
> > 'd'),所以用这个正则式\s{3}(\S)*\s*(\S)*,但是a[1]也被匹配了。请问有没有什么方法可以通过正则式把a[1]过滤掉?谢谢。
> >
>
> 把(\S)*改为(\S)+试试
> --
> I like python!
> My Blog: http://www.donews.net/limodou
> NewEdit Maillist: http://groups.google.com/group/NewEdit
>
> _______________________________________________
> Python中文技术讨论邮件列表
> 发言: 发邮件到 python-chinese at lists.python.cn
> 订阅: 发送 subscribe 到 python-chinese-request at lists.python.cn
> 退订: 发送 unsubscribe 到  python-chinese-request at lists.python.cn
> 详细说明: http://python.cn/mailman/listinfo/python-chinese
>
>

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年11月19日 星期六 10:45

makeyunbad makeyunbad at gmail.com
Sat Nov 19 10:45:16 HKT 2005

在 05-11-19,shhgs<shhgs.efhilt at gmail.com> 写道:
> a1当然匹配了。
>
> 我们来看看 \s{3}(\S)*\s*(\S)* 是怎么和 '        dan   derek '匹配的
>
> 首先是 \s{3}和最前面的三个空格匹配
> 然后 (\S)* 什么都不匹配
> \s* 和dan前面的八个空格中剩下的五个匹配
> (\S)* 和dan 匹配
>
> 写正则表达式,越详细越好
> 你这里知道\s是空格,直接写出来
> "   (\S+)\s+(\S+)"
>
> 此外,顺便讲一下 (\S)+ 匹配什么,这个我也是运行之后才知道的。不过肯定是写错了。

'        dan   derek '的情况下,(\S)+ 是不匹配,我修改后是这样的'\s{3}(\S)+\s*(\S)*',修改程序增加判断

>>> for i in a:
... 	if p.match(i):
... 		p.match(i).groups()
...
('d', 'd')

'        dan   derek '被过滤掉了,我试了一下"   (\S+)\s+(\S+)",效果也是同样的。谢谢。

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2005年11月19日 星期六 12:06

shhgs shhgs.efhilt at gmail.com
Sat Nov 19 12:06:30 HKT 2005

(\S)+和(\S+)是不一样的。

On 11/18/05, makeyunbad <makeyunbad at gmail.com> wrote:
> 在 05-11-19,shhgs<shhgs.efhilt at gmail.com> 写道:
> > a1当然匹配了。
> >
> > 我们来看看 \s{3}(\S)*\s*(\S)* 是怎么和 '        dan   derek '匹配的
> >
> > 首先是 \s{3}和最前面的三个空格匹配
> > 然后 (\S)* 什么都不匹配
> > \s* 和dan前面的八个空格中剩下的五个匹配
> > (\S)* 和dan 匹配
> >
> > 写正则表达式,越详细越好
> > 你这里知道\s是空格,直接写出来
> > "   (\S+)\s+(\S+)"
> >
> > 此外,顺便讲一下 (\S)+ 匹配什么,这个我也是运行之后才知道的。不过肯定是写错了。
>
> '        dan   derek '的情况下,(\S)+ 是不匹配,我修改后是这样的'\s{3}(\S)+\s*(\S)*',修改程序增加判断
>
> >>> for i in a:
> ...     if p.match(i):
> ...             p.match(i).groups()
> ...
> ('d', 'd')
>
> '        dan   derek '被过滤掉了,我试了一下"   (\S+)\s+(\S+)",效果也是同样的。谢谢。
>
> _______________________________________________
> Python中文技术讨论邮件列表
> 发言: 发邮件到 python-chinese at lists.python.cn
> 订阅: 发送 subscribe 到 python-chinese-request at lists.python.cn
> 退订: 发送 unsubscribe 到  python-chinese-request at lists.python.cn
> 详细说明: http://python.cn/mailman/listinfo/python-chinese
>
>

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号