正则表达式匹配字符串中的[^'],但也匹配\'

2024-06-01 08:49:06 发布

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

我正在解析一个.SQL文件并尝试将其写入Mongodb。你知道吗

我用了这个正则表达式

\((\d+),'([^']+)'(?:,(\d+))(?:,(\d+))(?:,(\d+))\)

,它适用于大多数情况。你知道吗

(431532,'Fluorescent_cheese_dyes',0,0,0),(431533,'Christian_Rock_albums',0,0,0),
(431534,'Variety_radio_stations',0,0,0),(431535,'Dean\'s_list',0,0,0),

但在最后一个例子中,关于哪里有\',它没有,因为我使用了'([^']+)'来匹配字符串。当我将'([^']+)'更改为'((?:(?:\')|[^'])+)'时,它将匹配一个实例中的所有案例,而不是4个。分组如下:

1.  431532
2.  Fluorescent_cheese_dyes',0,0,0),(431533,'Christian_Rock_albums',0,0,0),(431534,'Variety_radio_stations',0,0,0),(431535,'Dean\'s_list
3.  0
4.  0
5.  0

如果第二个组将字符串与\'匹配,我该如何处理这个问题?你知道吗


Tags: 文件字符串sqlmongodblistradiorockstations
3条回答

看来你必须解释引号中的任何转义。你知道吗

 # \((\d+),'((?:\\[\S\s]|[^'\\])*)'(?:,(\d+))(?:,(\d+))(?:,(\d+))\)

 \(
 ( \d+ )                             # (1)
 ,
 '
 (                                   # (2 start)
      (?: \\ [\S\s] | [^'\\] )*
 )                                   # (2 end)
 '
 (?:
      ,
      ( \d+ )                        # (3)
 )
 (?:
      ,
      ( \d+ )                        # (4)
 )
 (?:
      ,
      ( \d+ )                        # (5)
 )
 \)

只需使用非贪婪的..+?

\((\d+),'(.+?)'(?:,(\d+))(?:,(\d+))(?:,(\d+))\)

例如:https://regex101.com/r/zV0lZ1/1

我建议用'(([^']|\\')+)'代替'([^']+)'。你知道吗

字符串用单引号括起来。它包含以下一个或多个实例:

  • 除单引号以外的字符,或
  • 单引号由一个反斜杠转义

相关问题 更多 >