Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python使用正则表达式提取文本文件中的段落_Python_Regex_Text Mining_Text Extraction_String Parsing - Fatal编程技术网

Python使用正则表达式提取文本文件中的段落

Python使用正则表达式提取文本文件中的段落,python,regex,text-mining,text-extraction,string-parsing,Python,Regex,Text Mining,Text Extraction,String Parsing,我正在使用Python3.7,并试图使用正则表达式从一些文本文件中提取一些段落 下面是txt文件内容的示例 AREA: OMBEYI MARKET, ST. RITA RAMULA DATE: Thursday 25.03.2021, TIME: 9.00 A.M. = 5.00 P.M. Ombeyi Mk, Kiliti Mkt, Masogo Mkt, Miwani, Kasongo, Onyango Midika, St. Rita Ramula, Onyalo Biro, Yawo

我正在使用Python3.7,并试图使用正则表达式从一些文本文件中提取一些段落

下面是txt文件内容的示例

AREA: OMBEYI MARKET, ST. RITA RAMULA

DATE: Thursday 25.03.2021, TIME: 9.00 A.M. = 5.00 P.M.

Ombeyi Mk, Kiliti Mkt, Masogo Mkt, Miwani, Kasongo, Onyango Midika, St. Rita Ramula, Onyalo
Biro, Yawo Pri, Obino, Rutek, Keyo Pri & adjacent customers.

AREA: NYAMACHE FACTORY

DATE: Thursday 25.03.2021, TIME: 830 A.M. - 3.00 P.M.

Nyamache Fact, Suguta, Gionseri, Igare, Kionduso, Nyationgongo, Enchoro, Kebuko, Emenwa, Maji
Mazuri, Borangi & adjacent customers.

AREA: SUNEKA MARKET, RIANA MARKET

DATE: Thursday 25.03.2021, TIME: 8.00 A.M. - 3.00 P.M.

Suneka Mk, Riana Mk, Kiabusura, Gesonso, Chisaro, Sugunana, Nyamira Ndogo & adjacent
customers.

AREA: ITIATI, GITUNDUTI

DATE: Thursday 25.03.2021, TIME: 9.00 A.M. = 2.00 P.M.

General China, Gachuiro, Gathuini Pri, Itiati Campus, Kianjugum, Gikore, Kihuri TBC, Gitunduti &
adjacent customers.

目前,我可以使用正则表达式提取区域、日期和时间:

area_pattern = re.compile("^AREA:((.*))")
date_pattern = re.compile("^DATE:(.*),")
time_pattern = re.compile("TIME:(.*).")
我希望能够在日期/时间之后和区域之前提取包含逗号分隔位置的段落。因此,我将能够满足以下条件:

1.
Ombeyi Mk, Kiliti Mkt, Masogo Mkt, Miwani, Kasongo, Onyango Midika, St. Rita Ramula, Onyalo
Biro, Yawo Pri, Obino, Rutek, Keyo Pri & adjacent customers.

2.
Nyamache Fact, Suguta, Gionseri, Igare, Kionduso, Nyationgongo, Enchoro, Kebuko, Emenwa, Maji
Mazuri, Borangi & adjacent customers.

3.
Suneka Mk, Riana Mk, Kiabusura, Gesonso, Chisaro, Sugunana, Nyamira Ndogo & adjacent
customers.

4.
General China, Gachuiro, Gathuini Pri, Itiati Campus, Kianjugum, Gikore, Kihuri TBC, Gitunduti &
adjacent customers.


如果有人能建议一个正则表达式来帮助这个用例,以及改进我当前的正则表达式,我将非常感激。谢谢

您可以将此正则表达式与要在
re.findall
中使用的捕获组一起使用:

\n数据:.*\n*(?:\n.*)+?)(?=\n区域:|\Z)

正则表达式详细信息:

  • \n日期:
    :在匹配换行符后匹配文本
    日期:
  • *\n*
    :匹配行的其余部分,后跟0个或多个换行符
  • ((?:\n.*)+)
    :捕获组1以捕获文本,在满足下一个条件之前,该文本包含一行或多行内容
  • (?=\nAREA:|\Z)
    :断言我们有一个换行符,后跟
    区域:
    ,或者输入结束,就在当前位置的正前方

您可以将此正则表达式与捕获组一起使用,以便在
re.findall
中使用:

\n数据:.*\n*(?:\n.*)+?)(?=\n区域:|\Z)

正则表达式详细信息:

  • \n日期:
    :在匹配换行符后匹配文本
    日期:
  • *\n*
    :匹配行的其余部分,后跟0个或多个换行符
  • ((?:\n.*)+)
    :捕获组1以捕获文本,在满足下一个条件之前,该文本包含一行或多行内容
  • (?=\nAREA:|\Z)
    :断言我们有一个换行符,后跟
    区域:
    ,或者输入结束,就在当前位置的正前方

作为替代模式:

^DATE:.*((?:\n(?!AREA:).*)+)
  • ^DATE:.*
    匹配
    日期:
    和行的其余部分
  • Capturegroup 1
    • (?:\n(?!AREA:).*)+
      重复1+行不以
      AREA:
  • 关闭第1组

|

作为替代模式:

^DATE:.*((?:\n(?!AREA:).*)+)
  • ^DATE:.*
    匹配
    日期:
    和行的其余部分
  • Capturegroup 1
    • (?:\n(?!AREA:).*)+
      重复1+行不以
      AREA:
  • 关闭第1组

|

非常感谢。这很有效,您的正则表达式细节让我更好地理解了如何处理类似的用例。非常感谢。这是有效的,您的正则表达式细节让我更好地理解了如何处理类似的用例。感谢您提供这种替代模式。成功了!感谢您提供这种替代模式。成功了!