Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.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
Python中提取ASCII图形的正则表达式_Python_Regex_Ascii - Fatal编程技术网

Python中提取ASCII图形的正则表达式

Python中提取ASCII图形的正则表达式,python,regex,ascii,Python,Regex,Ascii,为了学习,我试图用正则表达式找出一个更大的文本文件中出现的所有给定ASCII数字 输入数字为 | | ###O | | 示例更大的输入文件是 | | ###O | | | | ###O | |

为了学习,我试图用正则表达式找出一个更大的文本文件中出现的所有给定ASCII数字

输入数字为

| |
###O
| |
示例更大的输入文件是

  | |                                
  ###O                               
  | |           | |                  
                ###O                 
                | |              | | 
                                 ###O
                                 | | 

要找出那个大文件中所有输入图形的出现,什么样的简洁正则表达式才是最合适的呢

根据您希望的匹配程度,以下内容将与您的ASCII艺术风格相匹配:

(\s+)[|]\s[|]\s*\R+\s*\1###O\s*\R+\s*\1[|]\s[|]


由于它对空格的处理比较宽松,因此它也将与标识不可靠的艺术相匹配。如果你想更严格,这将是困难的,因为重叠的线,其中一个“符号”结束,新的开始。将其转换为仍然尊重缩进的正则表达式是我没有解决方案的事情,因为我想使用简单的反向引用而不是回溯。

对于给定的情况,捕获它的正则表达式是:

 "\s*\| \|\s*###O\s*\| \|"

只需使用Python中的
re
包计算出现的次数,这不是正则表达式的作用。您不能使用正则表达式,因为ASCII art是不规则的:),但为了不让您没有任何选择,如果您可能需要计算此卫星的所有出现次数(?),那么您可以计算头部(
O
),或者,当需要更高的精度时,您可以尝试将ascii art解析为2D字符数组,并在相邻字符中搜索其余的“卫星”部分。是的,我知道正则表达式可能不适用于此类情况,但出于乐趣和学习,我想使用正则表达式也这样做:)在“卫星”不适用于此类情况时在同一高度:正如你在回答中提到的,在这样的情况下,它不会起作用。