正则表达式可识别仅包含数字或单个字符的文本中的行

时间:2018-11-29 13:38:10

标签: python regex string pattern-matching

伙计们

我有一个用例,我知道可以用Python中的传统字符串方法解决。我正在寻找更多正则表达式的方式来解决它。

用例:

  

鉴于文件中的文本,我想删除所有这样的行   包含

     
      
  • 仅单个数字(可以带括号也可以不带括号),例如29,[29],(29),{29}
  •   
  • 仅单个字符(可以带括号也可以不带括号),例如m,[m],(m),{m}
  •   
  • 只有空行
  •   

Python方式(我知道):

  
      
  • 从末端去除空白
  •   
  • 去除括号(如果有)
  •   
  • 对于数字:使用str.isdigit()检查字符串是否为数字
  •   
  • 对于字符,只需检查此字符串的长度等于1
  •   

示例:

hello world...
again hello world...

29 

..
[a]
bye bye...
see you..

预期输出:

hello world...
again hello world...
..
bye bye...
see you..

我想了解如何使用单个正则表达式(如果可能)执行这些步骤。

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用

^[({\[]?(?:\d+|[a-z])?[)}\]]?\s*$[\n\r]

将用空字符串替换,请参见a demo on regex101.com
开始学习正则表达式时,请尽可能多地打开“ verbose ”模式。


在这种情况下

^         # the start of a line in multiline mode (m flag)
[({\[]?   # a character class ([...]) of (,{ or [ zero or 1 times
(?:       # opening of a non-capturing class
    \d+   # multiple digits
|         # or
    [a-z] # a,b,c,...z
)?        # zero or 1 times
[)}\]]?   # one of ), } or ], zero or 1 times
\s*       # whitespaces, eventually
$         # end of the line
[\n\r]    # newline characters

有关更多信息,请参见Learning regular expressionsMastering Regular Expressions