📜  Python|使用正则表达式中的组捕获交换名称和日期

📅  最后修改于: 2022-05-13 01:55:18.040000             🧑  作者: Mango

Python|使用正则表达式中的组捕获交换名称和日期

在本文中,我们将学习如何使用 Regex 中的组捕获和数字反向引用功能交换列表中每个项目的名称和日期。

捕获组:括号将它们之间的正则表达式分组,并将它们中的正则表达式匹配的文本捕获到一个编号组中,即 ([\w ]+)可以与编号后向引用一起重复使用,即

\g

我们得到一个列表,其中每个项目都是一个字符串,其中包含一本书的名称,后跟它的发行年份。
我们必须使用正则表达式中的捕获组交换列表中每个项目的名称日期,并按时间顺序显示输出。让我们考虑几个例子:

例子:

Input  : Name (Date) 
Output : Date - Name

Input  : City of Glass (2009) 
Output : 2009 - City of Glass

Input  : Pride and Prejudice (1813)
Output : 1813 - Pride and Prejudice

注意:在输出中,日期没有括在括号之间,并且日期和名称之间有一个破折号。

Regex_Pattern : ([\w ]+) \((\d{4})\)

解释 :

  1. 上述模式中的括号将它们之间的正则表达式分组。 ([\w ]+) 是第一个捕获名称的组,它被反向引用
    \g<1>
    
  2. (\d{4}) 是第二组捕获日期,由
    \g<2>
    

    对于每个字符串。

  3. 我们使用.sub()将字符串中最左边不重叠的 regex_pattern 替换为新的 replace 。
    .subl(\g<2> - \g<1>,string)
    
  4. 交换名称和日期后,新字符串将附加到新列表中。
  5. 然后对新列表进行排序,我们遍历新列表并打印其中的每个项目。

代码:Python3 程序使用正则表达式交换列表中每个项目的名称和日期

# Python3 program to swap Name and Date for each item
# in the list using Regex
# sort the list after swapping to display the output
# in a chronological order
  
#Importing re package
import re
  
def swap_name_date(books=[]):
    # new empty list to store swapped data
    ordered_book_list=[]
  
    # RegexObject = re.compile( Regular expression, flag )
   # Compiles a regular expression pattern into a regular expression object
    regex_pattern = re.compile(r'([\w ]+) \((\d{4})\)')
  
    # Iterating through each item in unordered_books_list    
   # and swapping group 2 of date with group 1 of name
    for book in books:
        # Result after swapping is stored in res
        res = regex_pattern.sub('\g<2> - \g<1>' ,book)
        # res is appended to ordered_book_list
        ordered_book_list.append(res)
  
    # After all items of unordered_books_list are swapped
        # and appended to ordered_book_list
    # ordered_book_list is sorted
    ordered_book_list.sort()
  
    # Iterating through each item of ordered_book_list and printing it
    for book in ordered_book_list:
        print(book)
  
# Driver Code
if __name__=="__main__":
    #unordered_books_list stores data to be swapped
    unordered_books_list = [
         "City of Glass (2009)",
         "The Great Gatsby (1925)",
         "Pride and Prejudice (1813)",
         "The Hunger Games (2008)",
         "To Kill a Mockingbird (1960)",
         "The Notebook (1996)",
         "Jane Eyre (1847)",
         "The Catcher in the Rye (1951)",
         "The Lord of the Rings (1954)",
         "All the light We Cannot See (2014)",
         "Immortals of Meluha (2010)"
         ]
      
    swap_name_date(unordered_books_list)

输出:

1813 - Pride and Prejudice 
1847 - Jane Eyre
1925 - The Great Gatsby
1951 - The Catcher in the Rye
1954 - The Lord of the Rings
1960 - To Kill a Mockingbird
1996 - The Notebook
2008 - The Hunger Games
2009 - City of Glass
2010 - Immortals of Meluha
2014 - All the light We Cannot See