在不是空格的文本之后匹配任何内容的正则表达式

时间:2017-05-31 13:25:09

标签: regex powershell

我正在尝试创建一个在以下情况下返回TRUE或FALSE的正则表达式:

# Returns TRUE
'Apples: 1'
'Apples: are a fruit'
'Apples: z'
'Apples: I don't care what comes here if it's not only spaces or nothing'

# Returns FALSE
'Apples:'
'Apples:  '
'Apples:     '

到目前为止,我所尝试的内容很接近,但我似乎无法涵盖第二部分:

'Apples: ' -match '^Apples:[A-Za-z0-9]*'

唯一的问题是,Apples:之后需要有一些东西,不能是空格或空白。但是首先或之后会出现一些空格,但是在线上确实需要文本或数值。

感谢您的帮助。

7 个答案:

答案 0 :(得分:5)

我认为这应该有效:

'^Apples:\s*\S+\s*'

如果" Apple:"之后有一个或多个非空白字符,那么它将匹配,它可能有也可能没有前导空格或尾随空格。

答案 1 :(得分:3)

如果你只想要匹配/无匹配结果,你可以简单地匹配冒号,后跟任意数量的空格和至少一个非空白字符(:\s*\S)。

PS C:\> 'Apples:' -match ':\s*\S'
False
PS C:\> 'Apples: ' -match ':\s*\S'
False
PS C:\> 'Apples:  ' -match ':\s*\S'
False
PS C:\> 'Apples: are a fruit' -match ':\s*\S'
True
PS C:\> 'Apples:x' -match ':\s*\S'
True

如果你想能够提取行的其余部分,你可能想要使用一个lookbehind断言来锚定匹配后的任意数量的空白字符((?<=:\s*)\S.*)冒号。

PS C:\> 'Apples:' -match '(?<=:\s*)\S.*'
False
PS C:\> 'Apples: ' -match '(?<=:\s*)\S.*'
False
PS C:\> 'Apples:  ' -match '(?<=:\s*)\S.*'
False
PS C:\> 'Apples: are a fruit' -match '(?<=:\s*)\S.*'
True
PS C:\> $matches[0]
are a fruit
PS C:\> 'Apples:x' -match '(?<=:\s*)\S.*'
True
PS C:\> $matches[0]
x

答案 2 :(得分:2)

我认为你需要的是:

^Apples: *[A-Za-z0-9]+

其中:

  • *表示零个或多个空格
  • [A-Za-z0-9]+表示 A-Za-z0-9
  • 类型的一个或多个字符

答案 3 :(得分:0)

您可以使用正则表达式元字符\w来匹配任何单词字符:

$Apples = 'Apples: 1','Apples: are a fruit','Apples: z','Apples:','Apples:  ','Apples:     '

$Apples | ForEach {$_ -match '^Apples: \w' }

返回:

True
True
True
False
False
False

<强>解释

  

\ w元字符用于查找单词字符。

     

单词字符是a-z,A-Z,0-9中的字符,包括_   (下划线)角色。

     

答案 4 :(得分:0)

这是在Python中,但应该这样做。正则表达式说: 必须从Apples:开始,然后是空格,然后是NON-Space。您也可以使用\ w而不是\ S但是它不会捕获&amp; *%$类型的字符。你的电话:)希望有所帮助!

import re


thelist = ['Apples: 1', 'Apples: are a fruit', 'Apples: z', 'Apples: I dont care what comes here if its not only spaces or nothing', 'Apples:', 'Apples:  ', 'Apples:     ']
theregex = "^Apples:\s\S"

for word in thelist:
    if re.search(theregex, word):
        print ("Hurrah, it's true")
    else:
        print ("Welcome to false town")

答案 5 :(得分:0)

如果你想在匹配中实际捕获苹果的值,这个正则表达式可以工作:

^Apples:\s*(.*\S.*)\s*

它捕获匹配组1中的值。

答案 6 :(得分:-1)

如果您需要稍微更通用的解决方案(不仅仅是 Apples ),请尝试以下方法:

/^[A-Z]+: *\K\w.*/gmi

工作原理:

  • ^[A-Z]+: - 开始(注意 m 开关), 一系列字母(大写或小写 - 注意 i 开关)。
  • * - 可能有一些空格。
  • \K - 保持 - “忘记”到目前为止匹配的内容,设置起点 这场比赛。
  • \w.* - 一个字char,可能还有一些字符。
  • g 开关 - 捕获所有源行的结果。

实际匹配的文字仅 \ K 之后的内容。