Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.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
Regex 从txt文件中删除除数字以外的所有内容_Regex_Parsing_Text - Fatal编程技术网

Regex 从txt文件中删除除数字以外的所有内容

Regex 从txt文件中删除除数字以外的所有内容,regex,parsing,text,Regex,Parsing,Text,我需要帮助。我有一个包含很多信息的文本文件,包括姓名、方向和电话,但我只需要将电话保存在文件中。是这样的: Stephanie D. Ferebee Rua Inácio de Andrade, 128  (41) 5123313 James M. Tidwell Rua Oitenta e Quatro, 1698  (43) 2571815 Sherry M. Rossman Rua Fernandes Vieira, 218  (41) 2931075 我怎么能只保留档案上的号码?它们都

我需要帮助。我有一个包含很多信息的文本文件,包括姓名、方向和电话,但我只需要将电话保存在文件中。是这样的:

Stephanie D. Ferebee
Rua Inácio de Andrade, 128
 (41) 5123313
James M. Tidwell
Rua Oitenta e Quatro, 1698
 (43) 2571815
Sherry M. Rossman
Rua Fernandes Vieira, 218
 (41) 2931075

我怎么能只保留档案上的号码?它们都像:“(XX)XXXXXXX”(包括开头的空格)。

假设所有电话号码都以
(digit
)开头,您可以使用
grep
命令,如下所示:

$ grep "^ ([0-9]" file
 (41) 5123313
 (43) 2571815
 (41) 2931075

如果您只需要电话号码的正则表达式,请使用此正则表达式:

模式

\(\d{2}\) \d{7}
它将仅捕获您提供的格式中的数字:

(XX) XXXXXXX

如果您在Windows上,则可以使用PowerShell

Get-Content C:\test.txt | Select-String "\(\d{2}\) \d{7}"

您需要根据文本文件更改路径(此处
C:\test.txt
)。

因此,要使用TextWrangler和搜索与替换功能,您可以使用以下正则表达式来查找数字:

(\d{2}) \d{7}
但这无助于您仅保留所需内容。要选择特定组并删除其余组,您可以执行以下操作:

注意:
字符用于捕获组,因此您可以尝试以下操作:

查找:

替换:

$3
$3
表示只保留第三个匹配组,即
(\d{2})\d{7}

另外请注意,如果您的号码之间有空行,您可以开始第二次搜索并替换,然后搜索模式
^\r
。替换为nothing,瞧


或者,您可以将其组合成一个regexp(在搜索字段中):
/(.*)(.*)(\(\d{2}\)\d{7})(.*)((.(\r}\n)*)/g

您没有提到编程语言,所以总结一下:用户在Mac上,希望通过终端进行搜索和替换=grep答案适用。或者TextWrangler(这里的手册:(p114))。我正在使用Mac。我可以使用终端吗?不,Mac OS X不支持PowerShell。但是,您可以使用此处发布的各种grep命令,它们应该可以工作。请下次在问题中指定您的操作系统。现在,我只需删除所有不包含该模式的行:(我该怎么做?@user3044979什么语言?它只是纯文本。我使用Rubular.com在线正则表达式编辑器的模式,它以我提供的格式注释所有数字,但我不知道如何删除不包含它的行。我不明白。我发现所有数字都使用(\d{2})\d{7}(使用提供的完整表达式:
/(.*)(\(\d{2}\)\d{7})(.*)(.*)(.*)(.*))/g
,而不仅仅是
(\d{2})\d{7}
(只能说它找到了一些东西,但不能替换)。在替换字段中,您必须输入:
$3
,以从搜索中选择所需内容。它显示“模式”/((.*d{2}”)\d{7}(...*)(.*)(.*)/g“找不到。”。我做错了什么吗?也许可以尝试不带标志:
(.*)(\(\d{2})\d{7}(.*)(.*)(\r}\n)*
这对我来说很有效:是的,现在开始工作了!非常感谢您的时间,先生!您救了我的命!:)祝您度过愉快的一天!
$3