【问题标题】:Replace string which has dynamic character in python替换python中具有动态字符的字符串
【发布时间】:2019-11-22 00:41:19
【问题描述】:

试图用正则表达式替换字符串,但没有成功。

字符串是“LIVE_CUS2_PHLR182”、“LIVE_CUS2ee_PHLR182”和“PHLR182 - 测试恢复”。这里我需要将 PHLR182 作为所有字符串的输出,但第二个字符串的“ee”不是恒定的。它可以是带有 2 个字符的字符串或数字。下面是我尝试过的代码。

对于第一个和最后一个字符串,我只是简单地使用了replace 函数,如下所示。

s = "LIVE_CUS2_PHLR182"
s.replace("LIVE_CUS2_", ""), s.replace(" - testing recovery","")
>>> PHLR182

但我第二次尝试如下。

1. s= "LIVE_CUS2ee_PHLR182"
   s.replace(r'LIVE_CUS2(\w+)*_','')

2. batRegex = re.compile(r'LIVE_CUS2(\w+)*_PHLR182')
   mo2 = batRegex.search('LIVE_CUS2dd_PHLR182')
   mo2.group()

3. re.sub(r'LIVE_CUS2(?is)/s+_PHLR182', '', r)

在所有情况下,我都无法将“PHLR182”作为输出。请帮帮我。

【问题讨论】:

  • 如果你想用正则表达式替换,你需要使用re.sub,而不是s.replace
  • 为什么不"LIVE_CUS2ee_PHLR182".split('_')[-1]
  • @Keatinge 我也尝试过 re.sub
  • @lalithkumar,当需要作为输出/结果时,您的模式中包含明确的 PHLR182 是没有意义的
  • 使用re.search(r'[^_\s]+(?=\s|$)',s)怎么样

标签: python regex replace


【解决方案1】:

我认为这是你需要的:

import re

texts = """LIVE_CUS2_PHLR182
LIVE_CUS2ee_PHLR182
PHLR182 - testing recovery""".split('\n')

pat = re.compile(r'(LIVE_CUS2\w{,2}_| - testing recovery)')
#                   1st alt pattern | 2nd alt pattern
#                   Look for 'LIV_CUS2_' with up to two alphanumeric characters after 2
#                               ... or Look for ' - testing recovery'

results = [pat.sub('', text) for text in texts]
# replace the matched pattern with empty string

print(f'Original: {texts}')
print(f'Results: {results}')

结果:

Original: ['LIVE_CUS2_PHLR182', 'LIVE_CUS2ee_PHLR182', 'PHLR182 - testing recovery']
Results: ['PHLR182', 'PHLR182', 'PHLR182']

Python 演示:https://repl.it/repls/ViolentThirdAutomaticvectorization

正则表达式演示:https://regex101.com/r/JiEVqn/2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-03
    • 2016-08-22
    相关资源
    最近更新 更多