伙计们
我有一个用例,我知道可以用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..
我想了解如何使用单个正则表达式(如果可能)执行这些步骤。
谢谢!
答案 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 expressions或Mastering Regular Expressions。