Closed. This question needs details or clarity。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
                        
                        3年前关闭。
                                                                                            
                
        
我从inp = re.sub('[^A-Z]', '', inp)开始,但是意识到可以删除val = 0,但是我不想在字符串的开头不删除val = 0,而在其他情况下则要删除所有非大写字母的字符。我怎么做?

最佳答案

此解决方案用于不知道开头要保护的子字符串的情况。

要在字符串的开头“保护”特定的子字符串并删除其他位置的某些字符,您需要在模式中指定一个替换,其中要保留的部分被捕获组包围。然后,在替换期间,您只需要检查捕获的组是否匹配,如果是,则只需恢复结果中的值即可。否则,替换为空字符串。

import re
inp = "val = 20 MORE @#$TEXT.!!??"
res = re.sub(r'(^val\s*=\s*\d+)|[^A-Z]', lambda m: m.group(1) if m.group(1) else "", inp)
print(res)


IDEONE demo

模式分解:


(^val\s*=\s*\d+)-val在字符串的开头(\s*)后跟0+空格符号(=),后跟\d+随后是0+空格符号,后跟1+数字(^)。 )
|-或
[^A-Z]-任何非大写字母的字符


注意如果需要替换所有非字母字符,请使用[A-Za-z]或在正则表达式定义中添加flags=re.I

关于python - 当某些字符不属于字符串时,如何查找? (正则表达式,Python),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36167408/

10-12 17:01
查看更多