Eliminar palabras duplicadas de la oración usando expresiones regulares

Dada una string str que representa una oración, la tarea es eliminar las palabras duplicadas de las oraciones usando expresiones regulares en Java.
Ejemplos: 
 

Entrada: str = “Adiós mundo mundo” 
Salida: Adiós mundo 
Explicación: 
Eliminamos la segunda ocurrencia de adiós y mundo de Adiós mundo mundo
Entrada: str = “Ram fue a su casa” 
Salida: Ram fue a su casa 
Explicación: 
Eliminamos la segunda aparición de fue y la segunda y tercera aparición de a de Ram fue fue a a su casa.
Entrada: str = “Hola hola mundo mundo” 
Salida: Hola mundo 
Explicación: 
Eliminamos la segunda ocurrencia de hola y mundode Hola hola mundo mundo. 
 

Acercarse
 

  1. Obtenga la sentencia.
  2. Forme una expresión regular para eliminar palabras duplicadas de oraciones. 
     
regex = "\\b(\\w+)(?:\\W+\\1\\b)+";
  1. Los detalles de la expresión regular anterior se pueden entender como: 
    • “\\b” : Un límite de palabras. Los límites son necesarios para casos especiales. Por ejemplo, en «Mi tesis es excelente», «es» no coincidirá dos veces.
    • “\\w+” Un carácter de palabra: [a-zA-Z_0-9] 
       
    • “\\W+” : Un carácter que no es una palabra: [^\w] 
       
    • “\\1” : Coincide con lo que haya coincidido en el primer grupo de paréntesis, que en este caso es (\w+) 
       
    • “+” : Coincide con lo que sea que se coloque después de 1 o más veces 
       
  2. Haga coincidir la oración con Regex. En Java, esto se puede hacer usando Pattern.matcher().
     
  3. devolver la oración modificada.

A continuación se muestra la implementación del enfoque anterior:
 

C++

// C++ program to remove duplicate words
// using Regular Expression or ReGex.
#include <iostream>
#include <regex>
using namespace std;
 
// Function to validate the sentence
// and remove the duplicate words
string removeDuplicateWords(string s)
{
 
  // Regex to matching repeated words.
  const regex pattern("\\b(\\w+)(?:\\W+\\1\\b)+", regex_constants::icase);
 
  string answer = s;
  for (auto it = sregex_iterator(s.begin(), s.end(), pattern);
       it != sregex_iterator(); it++)
  {
      // flag type for determining the matching behavior
      // here it is for matches on 'string' objects
      smatch match;
      match = *it;
      answer.replace(answer.find(match.str(0)), match.str(0).length(), match.str(1));
  }
 
  return answer;
}
 
// Driver Code
int main()
{
  // Test Case: 1
  string str1
      = "Good bye bye world world";
  cout << removeDuplicateWords(str1) << endl;
 
  // Test Case: 2
  string str2
      = "Ram went went to to his home";
  cout << removeDuplicateWords(str2) << endl;
 
  // Test Case: 3
  string str3
      = "Hello hello world world";
  cout << removeDuplicateWords(str3) << endl;
 
  return 0;
}
 
// This code is contributed by yuvraj_chandra

Java

// Java program to remove duplicate words
// using Regular Expression or ReGex.
 
import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
class GFG {
 
    // Function to validate the sentence
    // and remove the duplicate words
    public static String
    removeDuplicateWords(String input)
    {
 
        // Regex to matching repeated words.
        String regex
            = "\\b(\\w+)(?:\\W+\\1\\b)+";
        Pattern p
            = Pattern.compile(
                regex,
                Pattern.CASE_INSENSITIVE);
 
        // Pattern class contains matcher() method
        // to find matching between given sentence
        // and regular expression.
        Matcher m = p.matcher(input);
 
        // Check for subsequences of input
        // that match the compiled pattern
        while (m.find()) {
            input
                = input.replaceAll(
                    m.group(),
                    m.group(1));
        }
        return input;
    }
 
    // Driver code
    public static void main(String args[])
    {
 
        // Test Case: 1
        String str1
            = "Good bye bye world world";
        System.out.println(
            removeDuplicateWords(str1));
 
        // Test Case: 2
        String str2
            = "Ram went went to to his home";
        System.out.println(
            removeDuplicateWords(str2));
 
        // Test Case: 3
        String str3
            = "Hello hello world world";
        System.out.println(
            removeDuplicateWords(str3));
    }
}

Python3

# Python program to remove duplicate words
# using Regular Expression or ReGex.
import re
 
 
# Function to validate the sentence
# and remove the duplicate words
def removeDuplicateWords(input):
 
    # Regex to matching repeated words
    regex = r'\b(\w+)(?:\W+\1\b)+'
 
    return re.sub(regex, r'\1', input, flags=re.IGNORECASE)
 
 
# Driver Code
 
# Test Case: 1
str1 = "Good bye bye world world"
print(removeDuplicateWords(str1))
 
# Test Case: 2
str2 = "Ram went went to to his home"
print(removeDuplicateWords(str2))
 
# Test Case: 3
str3 = "Hello hello world world"
print(removeDuplicateWords(str3))
 
# This code is contributed by yuvraj_chandra
Producción: 

Good bye world
Ram went to his home
Hello world

 

Publicación traducida automáticamente

Artículo escrito por prashant_srivastava y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *