将正则表达式拆分为多行时,它将停止工作

2024-10-01 02:40:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个很长的正则表达式,其中包含许多或|或|或:

re.findall(u'\W\s[A-Z]$|(com.|d\.)|\(?adj.\)?|(all\.$)|^(Pays|région|lieu-dit|chef-
lieu|canal|collégiale|ruisseau|bâtiment|hôpital|roi de|(bailliage|canton)(s?))|site|afflu(a|e)nt|forêt|village|église|état(s?)',
su)

我试着和\:

re.findall(u'\W\s[A-Z]$\
      |(com.|d\.) \
      |\(?adj.\)? \
      |(all\.$) \
      |^(Pays|région|lieu-dit \
      |chef-lieu 
       etc

当我像这样分割它时-它停止工作,但是Spyder没有叫出任何错误-它只是停止输出。你知道吗


Tags: recomallchefpayscanalditadj
1条回答
网友
1楼 · 发布于 2024-10-01 02:40:30

您在行的开头以及某些行的结尾引入了空格:

>>> u'\W\s[A-Z]$\
...       |(com.|d\.) \
...       |\(?adj.\)? \
...       |(all\.$) \
...       |^(Pays|région|lieu-dit \
...       |chef-lieu '
u'\\W\\s[A-Z]$      |(com.|d\\.)       |\\(?adj.\\)?       |(all\\.$)       |^(Pays|r\xe9gion|lieu-dit       |chef-lieu '

如果要跨多个源行拆分字符串,请使用以下任一连续字符串:

re.findall(u'\W\s[A-Z]$'
         u'|(com.|d\.)'
         u'|\(?adj.\)?'
         u'|(all\.$)'
         u'|^(Pays|région|lieu-dit'
            u'|chef-lieu|canal|collégiale|ruisseau|bâtiment|hôpital'
            u'|roi de|(bailliage|canton)(s?))'
         u'|site|afflu(a|e)nt'
         u'|forêt|village|église|état(s?)',
    sn
)

哪个Python将在编译时自动加入:

>>> (u'\W\s[A-Z]$'
...          u'|(com.|d\.)'
...          u'|\(?adj.\)?'
...          u'|(all\.$)'
...          u'|^(Pays|région|lieu-dit'
...             u'|chef-lieu|canal|collégiale|ruisseau|bâtiment|hôpital'
...             u'|roi de|(bailliage|canton)(s?))'
...          u'|site|afflu(a|e)nt'
...          u'|forêt|village|église|état(s?)')
u'\\W\\s[A-Z]$|(com.|d\\.)|\\(?adj.\\)?|(all\\.$)|^(Pays|r\xe9gion|lieu-dit|chef-lieu|canal|coll\xe9giale|ruisseau|b\xe2timent|h\xf4pital|roi de|(bailliage|canton)(s?))|site|afflu(a|e)nt|for\xeat|village|\xe9glise|\xe9tat(s?)'

或者使用详细的正则表达式语法:

re.findall(u'''
      \W\s[A-Z]$
     |(com.|d\.)
     |\(?adj.\)?
     |(all\.$)
     |^(Pays|région|lieu-dit
        |chef-lieu|canal|collégiale|ruisseau|bâtiment|hôpital
        |roi de|(bailliage|canton)(s?))
     |site|afflu(a|e)nt
     |forêt|village|église|état(s?)''', su, flags=re.VERBOSE)

re.VERBOSE标志将解析器更改为忽略all文本空白;解析上面的表达式时,就好像不存在所有空格、制表符和换行符一样。一行中的任何#注释也会从#到换行中剥离。你知道吗

相关问题 更多 >