【问题标题】:regex to remove the last word if it contains a character正则表达式删除最后一个单词,如果它包含一个字符
【发布时间】:2012-12-06 11:19:02
【问题描述】:

我需要一个 Python 中的正则表达式,如果它包含某个字符(在本例中为“#”),它将从字符串中删除最后一个单词,而在该字符的其他外观中,仅删除该字符,而不是这个词。

所以字符串:

多么美好的一天#happy

会变成:

多么美好的一天

到目前为止我已经尝试过

    entry = re.sub('(?<=#)\w+','',entry) 

但这会删除所有包含“#”的单词。

【问题讨论】:

  • 欢迎堆栈溢出。在您在这里提出问题之前,您应该做出一些合理的努力来自己解决问题,并报告“您尝试过什么”以及您遇到的问题。由于您已经听说过正则表达式,因此您需要学习如何使用它们。
  • 道歉亚历克西斯,我已经编辑了帖子。我是新来的。
  • 没有问题。看起来你已经有了答案;如果它解决了您的问题,请点击复选标记“接受”它。

标签: python regex


【解决方案1】:
import re

print(re.sub(r'''(?x)    # VERBOSE mode
                 [#]     # literal #
                 |       # or
                 \s*     # zero-or-more spaces
                 \w*     # zero-or-more alphanumeric characters 
                 [#]     # literal #
                 \w*     # zero-or-more alphanumeric characters 
                 $       # end of line
                 ''',
             '', # substitute matched text with an empty string
             'What a #great day #happy'))

产量

What a great day

【讨论】:

    【解决方案2】:
    import re
    
    s='What a #great day #happy'
    
    # Test if the last word has a '#'
    if re.match('#',s.rsplit(' ', 1)[1]):
        # Deal with everything but last word and do replacement         
        print re.sub('#', '',s.rsplit(' ', 1)[0])  
    else:
        # Else replace all '#' 
        print re.sub('#', '',s) 
    
    >>> What a great day
    

    【讨论】:

    • 谢谢!感谢您添加 cmets,我现在了解它是如何工作的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    • 1970-01-01
    • 2013-04-28
    • 2015-11-22
    • 2012-07-03
    • 2019-03-21
    相关资源
    最近更新 更多