0

我正在尝试为这种类型的字符串找到正确的正则表达式外观:

cat: monkey, ab4 / 1997 / little: cat, 1954/ afgt22 /dog: monkey, 173 / pine-apple: duer, 129378s. / 12

我要设置的正则表达式是:

插入字符'|' 在任何“单词”之前,后跟“:”,作为“单词”任何类型的单词,只有字符而不是数字。

问题:

我无法找到一种方法来考虑字符串的开头,包含'-'的单词或特殊字符前面的单词,如'/'而不是空格,如下例所示:

https://regex101.com/r/gX7wY0/5

如您所见,到目前为止,其中只有一个有效,但是 '|' char 后面有一个空格,然后是单词后面跟着 ':'。

我想做的是:

|cat: monkey, ab4 / 1997 / |little: cat, 1954/ afgt22 /|dog: monkey, 173 / |pine-apple: duer, 129378s. / 12

到目前为止,只有特殊字符 '-' 在 ':' 之前构成单词的一部分。

在此先感谢,我仍在学习如何在 Python 中使用正则表达式。欢迎任何提示!

4

1 回答 1

1

您可以使用r'\b'来搜索分词。对于您正在寻找的情况

  • 匹配的子字符串:[A-Za-z\-]+
  • 并被分词包围:\b[A-Za-z\-]+\b
  • 然后是一个冒号:\b[A-Za-z\-]+\b:
  • 您可以使用括号捕获单词:\b([A-Za-z\-]+)\b:
  • 并在替换中使用\1
import re

s = 'cat: monkey, ab4 / 1997 / little: cat, 1954/ afgt22 /dog: monkey, 173 / pine-apple: duer, 129378s. / 12'

re.sub(r'(\b[A-Za-z\-]+\b):', r'|\1:', s)
# returns:
'|cat: monkey, ab4 / 1997 / |little: cat, 1954/ afgt22 /|dog: monkey, 173 / |pine-apple: duer, 129378s. / 12'
于 2019-08-15T19:39:41.283 回答