我想从字符串中删除“ - ”但不删除“ - ”。 例如:“01-Frozen - Madonna.mp3”变为“01Frozen - Madonna.mp3” 我将使用/ d删除所有数字,我已经看到了一些模式。 那么身体能帮助吗?
答案 0 :(得分:1)
我们以你已经指定的例子为例。 01-Frozen - Madonna.mp3
。
模式是:<non space character><hyphen><non space character>
如果你需要一个空格,正则表达式将是\s
,它将匹配一个不间断的空格。正则表达式的精彩方面是大多数匹配标志具有相反的标记,通常用相同标识符的大写字母表示。因为,在这种情况下,我们不想要一个空格,我们可以使用匹配所有不是空格的字符的\S
。
所以模式现在看起来像是:\S-\S
。
如果您已经尝试过此操作,它将无法按预期工作,因为我们只需要 连接器周围没有非空格项的连字符,并且不应包含非空格 - 物品本身。
像这样的案件需要一种特殊的......呃...被称为lookaheads
和lookbehinds
的事情。通常,这会涉及一个问号和一个标识符 - >
,<
,=
,:
,!
之一。这些额外的标识符确保您希望匹配得到什么样的懒惰。您可以阅读有关他们的更多信息here。
在这种情况下,我们需要使用 =
来确保附加到它的标记 - 在我们的例子中是\S
- 不会是结果的一部分。这称为positive lookahead
匹配器。所以最终的正则表达式看起来像这样:
/(?=\S)-(?=\S)/
[被修改]
释义@jerry的评论:
好吧,如果你想让它正常工作,你需要一个lookbehind:/(?&lt; = \ S) - (?= \ S)/。虽然在这种情况下我更喜欢消极的,因为更自然地说'没有先于'和'没有后跟':/(?
选项1:
/(?<=\S)-(?=\S)/
选项2:
/(?<!\s)-(?!\s)/