Perl正则表达式 - 我可以说'如果字符/字符串匹配,删除它以及它的所有权利'吗?

dgB*_*gBP 2 regex perl replace

我有一个字符串数组,其中一些包含字符' - '.我希望能够搜索它以及包含它的那些字符串我希望删除它右侧的所有字符.

所以,例如,如果我有:

$string1 = 'home - London';
$string2 = 'office';
$string3 = 'friend-Manchester';
Run Code Online (Sandbox Code Playgroud)

或者这样的东西,然后受影响的字符串将成为:

$string1 = 'home';
$string3 = 'friend';
Run Code Online (Sandbox Code Playgroud)

我不知道之前' - '之前的空格是否会包含在字符串中(我不想要它,因为我将在稍后比较字符串,尽管如果它不影响字符串比较那么没关系).

我知道我可以使用以下内容搜索和替换特定的字符串/字符:

$string1 =~ s/-//
or 
$string1 =~ tr/-//
Run Code Online (Sandbox Code Playgroud)

但是我对Perl中的正则表达式并不是很熟悉所以我不是百分之百确定这些.我环顾四周,'to the right of'在正则表达式中看不到任何相关内容.帮助赞赏!

amo*_*mon 6

您可以-使用此替换删除连字符后的任何内容:

s/-.*$//s
Run Code Online (Sandbox Code Playgroud)

但是,您需要在连字符之前删除空格,这样做

s/\s* - .* $//xs
Run Code Online (Sandbox Code Playgroud)

$正则表达式锚定在字符串的末尾,/s标志也允许点匹配换行符.虽然这$是多余的,但它可能会增加清晰度.

你的替换只会删除第一个-,你的音译将删除字符串中的所有连字符.