簡體   English   中英

用於在Python中重復字符串中的單詞的正則表達式

[英]regex for repeating words in a string in Python

我有一個很好的正則表達式來替換字符串中的重復字符。 但是現在我還需要替換重復的單詞,三個或更多的單詞將被兩個單詞替換。

喜歡

bye! bye! bye!

應該成為

bye! bye!

我的代碼到目前為止:

def replaceThreeOrMoreCharachetrsWithTwoCharacters(string): 
     # pattern to look for three or more repetitions of any character, including newlines. 
     pattern = re.compile(r"(.)\1{2,}", re.DOTALL) 
     return pattern.sub(r"\1\1", string)

假設您的需求中所謂的“單詞”是由空格或字符串限制包圍的一個或多個非空格字符,您可以嘗試以下模式:

re.sub(r'(?<!\S)((\S+)(?:\s+\2))(?:\s+\2)+(?!\S)', r'\1', s)

你也可以試試下面的正則表達式,

(?<= |^)(\S+)(?: \1){2,}(?= |$)

示例代碼,

>>> import regex
>>> s = "hi hi hi hi some words words words which'll repeat repeat repeat repeat repeat"
>>> m = regex.sub(r'(?<= |^)(\S+)(?: \1){2,}(?= |$)', r'\1 \1', s)
>>> m
"hi hi some words words which'll repeat repeat"

DEMO

我知道你是在使用正則表達式但是你可以使用一個簡單的循環來實現同樣的目的:

def max_repeats(s, max=2):
  last = ''
  out = []
  for word in s.split():
    same = 0 if word != last else same + 1
    if same < max: out.append(word)
    last = word
  return ' '.join(out)

作為獎勵,我允許指定不同的最大重復次數(默認值為2)。 如果每個單詞之間有多個空格,則會丟失。 你是否認為這是一個錯誤或功能取決於你:)

請嘗試以下方法:

import re
s = your string
s = re.sub( r'(\S+) (?:\1 ?){2,}', r'\1 \1', s )

您可以在此處查看示例代碼: http//codepad.org/YyS9JCLO

def replaceThreeOrMoreWordsWithTwoWords(string):
    # Pattern to look for three or more repetitions of any words.
    pattern = re.compile(r"(?<!\S)((\S+)(?:\s+\2))(?:\s+\2)+(?!\S)", re.DOTALL)
    return pattern.sub(r"\1", string)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM