【问题标题】:Delete all text on a line after specified text is found找到指定文本后删除一行上的所有文本
【发布时间】:2017-06-13 15:40:40
【问题描述】:

我正在使用一个名为 TextCrawler Pro 的程序,它允许我作为宏运行。

我想每天清理一个天气页面以从这里开始:

Billings, MT;93;62;80;53;Not as warm;NNE;10;44%;20%;8

Birmingham, AL;80;70;81;69;Thunderstorms;SSW;6;81%;90%;4

Bismarck, ND;92;57;92;63;Mostly sunny;SE;12;46%;36%;8

Boise, ID;85;51;77;49;Mostly sunny, nice;N;8;36%;0%;8

到这里:

Billings, MT;93;62;80;53;

Birmingham, AL;80;70;81;69;

Bismarck, ND;92;57;92;63;

Boise, ID;85;51;77;49;

我可以使用\;\d+\;\d+\;\d+\;\d+\; 找到,但我无法删除到行尾。

我尝试在上面的末尾添加\r\n,如下所示:\;\d+\;\d+\;\d+\;\d+\;\r\n

但这会将我所有的城市信息替换为实际的正则表达式代码。

有什么想法吗?我觉得我错过了一些非常简单的东西。

【问题讨论】:

  • cut -d\; -f1-5 < input.txt > output.txt 应该可以胜任...没有理由让正则表达式复杂化...
  • 谢谢,这是在 Windows 服务器上,但不知道如何运行?
  • 你用什么语言做这个?
  • 我正在使用一个名为 TextCrawler Pro 的程序,它允许我作为宏运行。 digitalvolcano.co.uk

标签: regex ide ascii comma csv


【解决方案1】:
(.*\,\s[A-Z]+;\d{2};\d{2};\d{2};\d{2};)(.+)

第一组是你所追求的,忽略第二组。 See it here

【讨论】:

  • 太棒了,我怎么能从文本中删除第 2 组?
【解决方案2】:

会有很多很多不同的模式可以成功地为您删除不需要的子字符串。这是我煮的一些。 (Demo)

67 步 ^([^;]+;[^;]+;[^;]+;[^;]+;[^;]+;).*$ #我列表中最有效的模式

91 步^((?:[^;]+;){5}).*$

127 步(.+?;.+?;.+?;.+?;.+?;).*

157 步((?:.+?;){5}).*

163 步(.+?;)[^\d].*

185 步(.+\d{2};)[A-Z].*

280 步(.*\,\s[A-Z]+;\d{2};\d{2};\d{2};\d{2};)(.+)

删除不需要的部分的方法是将整行替换为所需的部分。

参考这些文档页面:

https://www.digitalvolcano.co.uk/textcrawlermanual/regular_expression_reference_guide.htm

https://www.digitalvolcano.co.uk/textcrawlermanual/regular_expression_find_replace.htm

您应该可以只使用$1 作为替换值,一切都会被清理干净。

【讨论】:

    猜你喜欢
    • 2019-01-22
    • 1970-01-01
    • 1970-01-01
    • 2014-06-21
    • 2014-05-04
    • 1970-01-01
    • 1970-01-01
    • 2015-02-16
    • 1970-01-01
    相关资源
    最近更新 更多