Python中提取ASCII图形的正则表达式
为了学习,我试图用正则表达式找出一个更大的文本文件中出现的所有给定ASCII数字 输入数字为Python中提取ASCII图形的正则表达式,python,regex,ascii,Python,Regex,Ascii,为了学习,我试图用正则表达式找出一个更大的文本文件中出现的所有给定ASCII数字 输入数字为 | | ###O | | 示例更大的输入文件是 | | ###O | | | | ###O | |
| |
###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字符数组,并在相邻字符中搜索其余的“卫星”部分。是的,我知道正则表达式可能不适用于此类情况,但出于乐趣和学习,我想使用正则表达式也这样做:)在“卫星”不适用于此类情况时在同一高度:正如你在回答中提到的,在这样的情况下,它不会起作用。