Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 当多个空格带有正则表达式时,用分号替换空格_Regex - Fatal编程技术网

Regex 当多个空格带有正则表达式时,用分号替换空格

Regex 当多个空格带有正则表达式时,用分号替换空格,regex,Regex,我试了大约两个小时,我不确定我想做的是否有效 我有一个大文件,里面有一些数据 43034452 LONGSHIRTPAIETTE 17.30 27.90 0110 COL

我试了大约两个小时,我不确定我想做的是否有效

我有一个大文件,里面有一些数据

43034452      LONGSHIRTPAIETTE                                        17.30
               27.90                                    
                                             0110             


          COLOR               :                    :                    :                    :                    :
                :                    :                    :                    
             -11     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
43034453      LONG SHIRT PAI ETTE                                              16.40
               25.90                                    
                                             0110             


          COLOR               :                    :                    :                    :                    :
                :                    :                    :                    
              -3     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
43034454      BASIC                                                     4.99
                8.90                                    
                                             0110             


          COLOR               :                    :                    :                    :                    :
                :                    :                    :                    
              -5     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
(该文件有36k行。)

我想做的是把这整件事弄干净

最后,这些行应该如下所示

43034452;LONGSHIRTPAIETTE;17.30;27.90;0110
43034453;LONG SHIRT PAI ETTE;16.40;25.90;0110
43034454;BASIC;4.99;8.90;0110
所以有很多我不需要的数据。我正在用记事本++做正则表达式

我的正则表达式字符串现在看起来像
([0-9]*)\s{6,}([A-Z]*)\s*([0-9\.]*))\s*([0-9\.]*))\s*([0-9]*)

这给我带来了第一个数字,后面是6个空格。(必须是这样,因为有些行以
FF
开头,
FF
不是字母。这是一种我无法识别的符号,但如果我让记事本++显示我看到的所有符号,
FF

因此,我得到了

\1: 43034452
\2: LONGSHIRTPAIETTE
\3: 17.30
\4: 27.90
\5: 0110
和预期的一样,但在下一行它会停在空格上。如果我将
\s
添加到模式中,那么它也会选择单词part后面的所有空格。我显然不能说“只有一个空间”,对吗

所以我的问题是,我能用正则表达式得到我想要的选择吗

如果是,我做错了什么?

使用下面的正则表达式

([0-9]*)\s{6,}([A-Z]+(?:\s+[A-Z]+)*)\s*([0-9\.]*)\s*([0-9\.]*)\s*([0-9]*).*?(?=\n\S|$)
然后将匹配项替换为
\1\2;\3;\4;\5

不要忘记启用点调用修改器
s

使用下面的正则表达式

([0-9]*)\s{6,}([A-Z]+(?:\s+[A-Z]+)*)\s*([0-9\.]*)\s*([0-9\.]*)\s*([0-9]*).*?(?=\n\S|$)
然后将匹配项替换为
\1\2;\3;\4;\5

不要忘记启用点调用修改器
s

使用下面的正则表达式

([0-9]*)\s{6,}([A-Z]+(?:\s+[A-Z]+)*)\s*([0-9\.]*)\s*([0-9\.]*)\s*([0-9]*).*?(?=\n\S|$)
然后将匹配项替换为
\1\2;\3;\4;\5

不要忘记启用点调用修改器
s

使用下面的正则表达式

([0-9]*)\s{6,}([A-Z]+(?:\s+[A-Z]+)*)\s*([0-9\.]*)\s*([0-9\.]*)\s*([0-9]*).*?(?=\n\S|$)
然后将匹配项替换为
\1\2;\3;\4;\5

不要忘记启用点调用修改器
s

试试这个:

([0-9]+)\s{6,}((?:[A-Z]+\ )+)\s*([0-9\.]+)\s+([0-9\.]+)\s+([0-9]+)
请注意以下几点:

  • 在适当的情况下,将
    *
    压缩为
    +
    ,因此在这些列中强制使用一些字符或实际的空格
  • 用一个字母重复一个单词的一个或多个实例,然后再重复一个空格
试试这个:

([0-9]+)\s{6,}((?:[A-Z]+\ )+)\s*([0-9\.]+)\s+([0-9\.]+)\s+([0-9]+)
请注意以下几点:

  • 在适当的情况下,将
    *
    压缩为
    +
    ,因此在这些列中强制使用一些字符或实际的空格
  • 用一个字母重复一个单词的一个或多个实例,然后再重复一个空格
试试这个:

([0-9]+)\s{6,}((?:[A-Z]+\ )+)\s*([0-9\.]+)\s+([0-9\.]+)\s+([0-9]+)
请注意以下几点:

  • 在适当的情况下,将
    *
    压缩为
    +
    ,因此在这些列中强制使用一些字符或实际的空格
  • 用一个字母重复一个单词的一个或多个实例,然后再重复一个空格
试试这个:

([0-9]+)\s{6,}((?:[A-Z]+\ )+)\s*([0-9\.]+)\s+([0-9\.]+)\s+([0-9]+)
请注意以下几点:

  • 在适当的情况下,将
    *
    压缩为
    +
    ,因此在这些列中强制使用一些字符或实际的空格
  • 用一个字母重复一个单词的一个或多个实例,然后再重复一个空格

    • 你的方法是正确的。。只需在正则表达式中将
      *
      替换为
      +
      (多个)

      /([0-9]+)\s{6,}([A-Z ]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9]+)/g
      

      请参阅。

      您的方法是正确的。。只需在正则表达式中将
      *
      替换为
      +
      (多个)

      /([0-9]+)\s{6,}([A-Z ]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9]+)/g
      

      请参阅。

      您的方法是正确的。。只需在正则表达式中将
      *
      替换为
      +
      (多个)

      /([0-9]+)\s{6,}([A-Z ]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9]+)/g
      

      请参阅。

      您的方法是正确的。。只需在正则表达式中将
      *
      替换为
      +
      (多个)

      /([0-9]+)\s{6,}([A-Z ]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9]+)/g
      


      请参阅。

      这似乎可以在线使用,但在记事本++中不起作用。如果我使用这一个,它会跳过很多行,而不是只跳过两行和更多行……请检查更新的正则表达式。。我在
      ([A-Z]+)
      中漏掉了空格,实际上还可以,但是最后一个单词末尾的空格没有切掉。你能检查一下吗<代码>([0-9]+)\s{6,}([A-Z]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9]+)(?=\s)这应该在最后一个单词之后给你零个空格。同样的结果:)巴特,我接受了尼克的回答。这对我帮助最大。感谢您的尝试:)这似乎在线工作,但在记事本++中不起作用。如果我使用这一个,它会跳过很多行,而不是只跳过两行,然后再跳过一些行……请检查更新的正则表达式。。我在
      ([A-Z]+)
      中漏掉了空格,实际上还可以,但是最后一个单词末尾的空格没有切掉。你能检查一下吗<代码>([0-9]+)\s{6,}([A-Z]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9]+)(?=\s)这应该在最后一个单词之后给你零个空格。同样的结果:)巴特,我接受了尼克的回答。这对我帮助最大。感谢您的尝试:)这似乎在线工作,但在记事本++中不起作用。如果我使用这一个,它会跳过很多行,而不是只跳过两行,然后再跳过一些行……请检查更新的正则表达式。。我在
      ([A-Z]+)
      中漏掉了空格,实际上还可以,但是最后一个单词末尾的空格没有切掉。你能检查一下吗<代码>([0-9]+)\s{6,}([A-Z]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9]+)(?=\s)这应该在最后一个单词之后给你零个空格。同样的结果:)巴特,我接受了尼克的回答。这对我帮助最大。感谢您的尝试:)这似乎在线工作,但在记事本++中不起作用。如果我使用这一个,它会跳过很多行,而不是只跳过两行,然后再跳过一些行……请检查更新的正则表达式。。我在
      ([A-Z]+)
      中漏掉了空格,实际上还可以,但是最后一个单词末尾的空格没有切掉。你能检查一下吗<代码>([0-9]+)\s{6,}([A-Z]+)\s+([0-9\.]+)\s+([0-9\.]+)\s+([0-9]+)(?=\s)这应该在最后一个单词之后给你零个空格。同样的结果:)巴特,我接受了尼克的回答。这对我帮助最大。感谢您的尝试:)此图案也与颜色匹配的行。实际上这很好,因为最后一个单词后面的空格被切掉了,但是选择了很多行,但是它给了你预期的输出。。。因为如果我用semiko替换数据