正则表达式的正则表达式在Python中不匹配

用户名

我组成了一个正则表达式模式,旨在从一个句子中捕获一个日期和一个数字。但事实并非如此。

我的代码是:

txt = 'Την 02/12/2013 καταχωρήθηκε στο Γενικό Εμπορικό Μητρώο της Υπηρεσίας Γ.Ε.ΜΗ. του Επιμελητηρίου Βοιωτίας, με κωδικόαριθμό καταχώρισης Κ.Α.Κ.: 110035'

p = re.compile(r'''Την\s? # matches Την with a possible space afterwards

               (?P<KEK_date>\d{2}/\d{2}/\d{4}) #matches a date of the given format and captures it with a named group
               
               \.+ # Allow for an arbitrary sequence of characters 
               
               (?=(κωδικ.\s?αριθμ.\s?καταχ.ριση.)|(κ\.?α\.?κ\.?:?\s*)) # defines two lookaheads, either of which suffices
               
               (?P<KEK_number>\d+) # captures a sequence of numbers''', re.I|re.VERBOSE)

p.findall(txt)

我希望返回一个包含两个元素的列表:'02/12/2013''110035',但是它返回一个空列表。

维克多·史翠比维

问题:

  • \.+匹配一个或多个点,您需要使用.+(不要转义)
  • (?=(κωδικ.\s?αριθμ.\s?καταχ.ριση.)|(κ\.?α\.?κ\.?:?\s*))(?P<KEK_number>\d+)会始终阻止任何匹配,因为正向搜索需要一些非1或更多数字的文本。您需要将前瞻转换为使用模式。

我建议将您的模式固定为

p = re.compile(r'''Την\s? # matches Την with a possible space afterwards
(?P<KEK_date>\d{2}/\d{2}/\d{4}) #matches a date of the given format and captures it with a named group
.+ # Allow for an arbitrary sequence of characters 
(?:κωδικ.\s?αριθμ.\s?καταχ.ριση.|κ\.?α\.κ\.:?)\s+ # defines two lookaheads, either of which suffices
(?P<KEK_number>\d+) # captures a sequence of numbers''', re.I | re.X)

正则表达式演示

细节

  • Την\s?-Την字符串和可选的空格
  • (?P<KEK_date>\d{2}/\d{2}/\d{4})-组“ KEK_date”:日期模式,2位数字/,,2位数字/和4位数字
  • .+ -除换行符以外的1个或更多字符
  • (?:κωδικ.\s?αριθμ.\s?καταχ.ριση.|κ\.?α\.κ\.:?) -任一
    • κωδικ.\s?αριθμ.\s?καταχ.ριση.- κωδικ,任何字符,可选的空格,,αριθμ任何一个字符,可选的空格καταχ,,任意1个字符ριση和任意1个字符(但换行符)
    • | - 要么
    • κ\.?α\.κ\.:?- κ,可选.,,α可选.κa.然后是可选:
  • \s+ -1+空格
  • (?P<KEK_number>\d+) -组“ KEK_number”:1个以上的数字

参见Python演示

import re
txt = 'Την 02/12/2013 καταχωρήθηκε στο Γενικό Εμπορικό Μητρώο της Υπηρεσίας Γ.Ε.ΜΗ. του Επιμελητηρίου Βοιωτίας, με κωδικόαριθμό καταχώρισης Κ.Α.Κ.: 110035'
p = re.compile(r'''Την\s? # matches Την with a possible space afterwards
(?P<KEK_date>\d{2}/\d{2}/\d{4}) #matches a date of the given format and captures it with a named group
.+ # Allow for an arbitrary sequence of characters 
(?:κωδικ.\s?αριθμ.\s?καταχ.ριση.|κ\.?α\.κ\.:?)\s+ # defines two lookaheads, either of which suffices
(?P<KEK_number>\d+) # captures a sequence of numbers''', re.I | re.X)
print(p.findall(txt)) # => [('02/12/2013', '110035')]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

python中的正则表达式与单词不匹配

来自分类Dev

表达式不匹配正则表达式

来自分类Dev

正则表达式或不匹配

来自分类Dev

正则表达式不匹配

来自分类Dev

正则表达式不匹配

来自分类Dev

正则表达式不匹配

来自分类Dev

正则表达式不匹配

来自分类Dev

正则表达式不匹配

来自分类Dev

正则表达式不匹配

来自分类Dev

正则表达式与PHP中的正则表达式不匹配

来自分类Dev

正则表达式与PHP中的正则表达式不匹配

来自分类Dev

Python正则表达式搜索,匹配不匹配

来自分类Dev

Python正则表达式匹配

来自分类Dev

Python正则表达式与行首不匹配

来自分类Dev

Python正则表达式不匹配

来自分类Dev

Python正则表达式不匹配多个组

来自分类Dev

简单的Python正则表达式不匹配

来自分类Dev

Python正则表达式与模式不匹配

来自分类Dev

股票期权的 Python 正则表达式不匹配

来自分类Dev

根据python,正则表达式不匹配

来自分类Dev

matchstr与vimscript中的正则表达式不匹配

来自分类Dev

正则表达式在C#中不匹配

来自分类Dev

正则表达式在findText()中不匹配

来自分类Dev

正则表达式在Perl中不匹配

来自分类Dev

正则表达式中的前瞻不匹配

来自分类Dev

正则表达式在Java中不匹配

来自分类Dev

正则表达式与PHP中的内容不匹配

来自分类Dev

正则表达式在Perl中不匹配

来自分类Dev

正则表达式中的前瞻不匹配