匹配单词后忽略忽略包含字符的单词

时间:2019-05-20 17:56:47

标签: regex powershell

我希望匹配决赛之外的所有内容-但忽略包含return new <class>(<parameters>)的单词。

示例:

  

Tablet-MS Surface Pro 4-里卡多·科尔特斯(OFFSITE)

我如何只得到()

这是我尝试过的:

Ricardo Cortez

谢谢

3 个答案:

答案 0 :(得分:0)

不知道您是如何运行此正则表达式的,我会提出一些类似的建议:

/ - ([^\(]+) /g

旨在捕获括号内的所有内容。基本上,找到一个以连字符开头的匹配项,然后捕获所有内容,直到它碰到一个开括号字符(即不是开括号的任何字符)。

答案 1 :(得分:0)

您可以使用alternation首先匹配您不想要的内容,然后在组中捕获您想要的内容。

此模式不需要根据您使用的否定字符类[^-]+否定连字符但实际上不将其作为必需字符的模式,将连字符包含在字符串中。

^.*-|(?:^|[ \t]+)([^\s()]+)(?!\S)

说明

  • ^字符串的开头
  • .*-匹配所有字符0次以上,然后匹配-,以便匹配最后一个连字符
  • |
  • (?:^|[ \t]+)声明字符串的开头,或者匹配1+倍的空格或制表符
  • ([^\s()]+)在与+ times not a whitespace char oror)相匹配的第1组中捕获
  • (?!\S)负向查找,断言右边的内容不是非空格字符

Regex demo

修改

如果要使用replace,则可以匹配所有您不想保留的内容,并用空字符串替换:

^.*-\s*|\s*\S*[()]+\S*

说明

  • ^.*-\s*将任何字符单位匹配为最后一个连字符,后跟0+个空白字符
  • |
  • \s*将空格匹配0次以上
  • \S*[()]+\S*匹配0+次非空格字符,不匹配() 1+次,再匹配0+次非空格字符

Regex demo

例如

$string = "Tablet - MS Surface Pro 4 - Ricardo Cortez (OFFSITE)"
$name = $string -replace '^.*-|\S*[()]+\S*','' 
echo $name

答案 2 :(得分:0)

我的猜测是您想删除该名称。如果是这样,我们要捕获它,然后使用捕获组替换它。也许表达式类似于:

(.+?-\s)([A-Z].+)(\(.+)

enter image description here

Demo

const regex = /(.+?-\s)([A-Z].+)(\(.+)/gm;
const str = `Tablet-MS Surface Pro 4 - Ricardo Cortez (OFFSITE)`;
const subst = `$1$3`;

// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);

console.log('Substitution result: ', result);

如果我们可能想删除()及其中的所有内容,我们可以在第一个捕获组中滑动每个字符,然后捕获不需要的字符,然后替换为$1

([\s\S].*?)(\(.+?\))?

const regex = /([\s\S].*?)(\(.+?\))?/gm;
const str = `Tablet-MS Surface Pro 4 - Ricardo Cortez (OFFSITE)Tablet-MS Surface Pro 4 - Ricardo Cortez (OFFSITE)Tablet-MS Surface Pro 4 - Ricardo Cortez (OFFSITE)Tablet-MS Surface Pro 4 - Ricardo Cortez (OFFSITE)Tablet-MS Surface Pro 4 - Ricardo Cortez`;
const subst = `$1`;

// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);

console.log('Substitution result: ', result);

Demo

enter image description here

RegEx电路

jex.im还有助于可视化表达式。

enter image description here