使用RegEx从文本中排除字符串

时间:2017-05-04 08:45:06

标签: regex powershell

我有这个文字,我只想要连接时间和实际分钟

2015:05:02-08:29:52: Connect Time 11.4 Minutes.

2015:15:12-13:39:41: Connect Time 22.51 Minutes. 

我试过这个RegEx:

$_ -match 'Connect Time (.*[^minutes])\n'

但它给了我连线时间11.4分钟。

有什么想法吗?

5 个答案:

答案 0 :(得分:0)

如果我理解了你的要求那么 你可以试试这个:

Connect\s+Time\s+\d+(\.\d+)?

Regex Demo

它会给你:

Connect Time 11.4
Connect Time 22.51

答案 1 :(得分:0)

在powershell中,你可以这样做。如果您只想要时间Matches[1],或者想要全文Connect Time 11.4,那么您可以使用Matches[0]。我正在为单个字符串变量执行此操作,您可以将其扩展为您拥有的输入

$temp -match 'Connect\s+Time\s+(\d+.\d+)'
$Matches[0] ## Outputs Connect Time 11.4
$Matches[1] ## Outputs 11.4

对于数组,您可以这样做:

$temp3 = "2015:05:02-08:29:52: Connect Time 11.4 Minutes.", "2015:15:12-13:39:41: Connect Time 22.51 Minutes.", "3.9"
$temp3 | %{ $found = $_ -match 'Connect\s+Time\s+(\d+.\d+)'; if($found) { Write-Host $Matches[1] } else { Write-Host "Not Found" }}

# Output
# 11.4
# 22.51
# Not Found

答案 2 :(得分:0)

以下是一个正则表达式,可从您提供的数据中提取Connect Time 11.4Connect Time 22.51

Connect Time \d{1,2}.\d{1,2}

Demo

答案 3 :(得分:0)

你可以使用这个正则表达式:

^.*[Time ]([0-9\.]+)[Minute ].+$

下次您还可以使用工具https://regex101.com/

答案 4 :(得分:0)

您可以匹配1位数字,然后是.,如果子字符串后面跟着0 +空格字符,则可以匹配1+位 ;"分钟& #34;:

$_ -match '\d+\.\d+(?=\s*Minutes)'

请参阅regex demo

注意:必须转义.以匹配文字点。

  • \d+ - 1+位数
  • \. - 一个点
  • \d+ - 1+位数
  • (?=\s*Minutes) - 只检查是否有0+空格的正向前瞻,并且在与Minutes匹配的最后一个数字后立即检查\d+。如果没有,则不返回匹配。