【问题标题】:Find a word in a line no matter how it's written [duplicate]在一行中找到一个单词,不管它是如何写的[重复]
【发布时间】:2018-03-26 10:41:04
【问题描述】:

我试图在一个简单的字符串中找到一个单词,不管它是如何写的。例如:

'Lorem ipsum dolor sit amet lorem.'

假设我搜索用小写字母写的“lorem”,我想用“example”替换“lorem”和“Lorem”。 问题是,无论它是如何写的,我都想搜索和替换这个词。

我认为这应该使用正则表达式来完成,但我对它不是很熟悉。也许你们可以帮忙。

【问题讨论】:

  • 正则表达式结合sub() 函数和i 修饰符可能会做到这一点。
  • 如果你不想使用正则表达式,你可以做'lorem' in my_str.lower()(或'LOREM' in my_str.upper()

标签: python python-3.x


【解决方案1】:
import re
sentence = "Lorem ipsum dolor sit amet lorem."
search_key = "Lorem"
print(re.sub(r'%s' % search_key.lower(), 'example', sentence.lower()))
>>> example ipsum dolor sit amet example.

【讨论】:

  • 如果你要自己降低,这里不需要使用正则表达式(而不是使用单词边界之类的东西)。
  • 这确实会让你丢失关于不可替换单词的大小写信息。
【解决方案2】:

您只需要将字母设置为大写或小写即可。这次我是小写的。

import re

x='Lorem ipsum dolor sit amet lorem.'.lower()
y=input(" What word do you want to chage?").lower()


if not y in x:
    print("This word is not in the sentence. You cannot change it!")
else:
    z= y + " which word you want to write instead?"
    z=input(z)
    t=re.sub(y,z,x)
    print(t)

【讨论】:

  • 如果你要自己降低,这里不需要使用正则表达式(而不是使用单词边界之类的东西)。
  • 我只是用正则表达式替换了单词
【解决方案3】:

下面的代码应该适合你。

import re
pattern_rep = re.compile(re.escape('lorem'), re.IGNORECASE)
new_pattern=pattern_rep.sub('example', 'Lorem ipsum dolor sit amet lorem')
print(new_pattern)

【讨论】:

    【解决方案4】:

    没有regex 的另一种方式(适用于您在问题中的示例):

    s = 'Lorem ipsum dolor sit amet lorem.'
    print(s.replace('lorem', 'example').replace('Lorem', 'example'))
    # example ipsum dolor sit amet example.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-19
      • 1970-01-01
      • 1970-01-01
      • 2021-02-06
      • 1970-01-01
      • 2020-04-26
      • 1970-01-01
      相关资源
      最近更新 更多