【问题标题】:Search then Extract搜索然后提取
【发布时间】:2010-09-15 22:03:21
【问题描述】:

我有一个包含多条记录的文本文件。我想搜索名称和日期,例如,如果我输入 JULIUS CESAR 作为名称,则将提取有关 JULIUS 的全部数据。如果我只想提取信息怎么办?

Record number: 1
Date: 08-Oct-08
Time: 23:45:01
Name: JULIUS CESAR
Address: BAGUIO CITY, Philippines
Information:
I lived in Peza Loakan, Bagiou City
A Computer Engineering student
An OJT at TIPI.
23 years old.

Record number: 2
Date: 09-Oct-08
Time: 23:45:01
Name: JOHN Castro
Address: BAGUIO CITY, Philippines
Information:
I lived in Peza Loakan, Bagiou City
A Electronics Comm. Engineering Student at SLU.
An OJT at TIPI.
My Hobby is Programming.


Record number: 3
Date: 08-Oct-08
Time: 23:45:01
Name: CESAR JOSE
Address: BAGUIO CITY, Philippines
Information:
Hi,,
I lived Manila City
A Computer Engineering student
Working at TIPI.

【问题讨论】:

  • 这个问题真的和SQL有关系吗?

标签: regex perl parsing


【解决方案1】:

如果每个条目是一行,则可以使用正则表达式,例如:

$name = "JULIUS CESAR";

然后使用:

/$name/i 

测试每一行是否与“JULIUS CESAR”有关。然后您只需使用以下正则表达式来提取信息(一旦找到该行):

/Record number: (\d+) Date: (\d+)-(\w+)-(\d+) Time: (\d+):(\d+):(\d+) Name: $name Address: ([\w\s]+), ([\w\s]+?) Information: (.+?)$/i

$1 = 记录编号

$2-$4 = 日期

$5-$7 = 时间

$6 = 地址

$7 = cmets

我会写一个代码示例,但是我的 perl 生锈了。我希望这会有所帮助:)

【讨论】:

  • 这对我来说看起来不正确......在你的正则表达式末尾 $,我不记得那是字符串的结尾还是行的结尾,但是要么我认为这是不对的。如果它是字符串的结尾,那么您将获得 JULIUS CESAR 之后的信息和每条记录。如果这意味着行尾,那么您只会得到 1 行文本而不是所有信息。
【解决方案2】:

在 PHP 中,您可以运行如下 SQL 选择语句:

“选择 * WHERE name LIKE 'JULIUS%';”

在 PHP 的某些原生方面,您可以在关联数组中获取所有结果。我很确定它是按行顺序排列的。然后你可以这样做:

回声内爆(" ", $whole_row);

希望这就是你要找的东西!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-21
    • 2018-07-18
    • 2015-04-07
    • 2020-10-21
    • 2019-06-13
    相关资源
    最近更新 更多