python正则表达式或在具有空间模式匹配的单个字符上

2024-05-26 07:45:29 发布

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

我正试图找出如何压缩模式匹配规则的数量,我需要创建这些规则,以适应我在派克街西南角看到一个人的情况。对于“西南角”,我不想为每个方向变化(N、S、E、W等)编写匹配规则。我试着用下面的方法来做,但是不对。好吧,它起作用了,但它也能吸收其他东西

例如:

matcher.add("DIRECTION", None,
           [{}, {"TEXT":{"REGEX":"(?:N)|(?:S)|(?:E)|(?:W)|(?:NW)|(?:NE)|(?:SW)|(?:SE)"}}, {"LOWER":"corner"}]
           )

我希望能够使用OR语句,但我不确定如何使用单字符或双字符(N、S、E、W、NW、NE、SW、SE)

我做错了什么


Tags: 方法noneadd数量规则情况matchersw
2条回答

使用字符集https://regex101.com/r/Nx19GG/1

(?:[NS][EW]?)|(?:[EW])

有关正则表达式语法的入门知识,请参阅Python文档:https://docs.python.org/3/library/re.html#regular-expression-syntax

不要过度使用非捕获组,(?:SW)SW相同

另外,您不想在SED标记中匹配SE,请使用^$

使用

{"REGEX":"^(?:N|S|E|W|NW|NE|SW|SE)$"}

proof

不区分大小写的变体:

{"REGEX":"(?i)^(?:N|S|E|W|NW|NE|SW|SE)$"}

解释

                                        
  ^                        the beginning of the string
                                        
  (?:                      group, but do not capture:
                                        
    N                        'N'
                                        
   |                        OR
                                        
    S                        'S'
                                        
   |                        OR
                                        
    E                        'E'
                                        
   |                        OR
                                        
    W                        'W'
                                        
   |                        OR
                                        
    NW                       'NW'
                                        
   |                        OR
                                        
    NE                       'NE'
                                        
   |                        OR
                                        
    SW                       'SW'
                                        
   |                        OR
                                        
    SE                       'SE'
                                        
  )                        end of grouping
                                        
  $                        before an optional \n, and the end of the
                           string

相关问题 更多 >