python - 匹配冒号前后的短语

标签 python regex

我有以下字符串:

'FIELDS--> FIELD1: Random Sentence  \r\n FIELD2: \r\nSOURCEHINT--> FIELD3: 
 value.nested.value, FIELD4: 5.5.5.5, FIELD5: Longer Sentence, with more words-and punctation\r\n'

我想要上面字符串中的以下内容:

[FIELD1, Random Sentence]
[FIELD2, ]
[FIELD3, value.nested.value]
[FIELD4, 5.5.5.5]
[FIELD5, Longer Sentence, with more words-and punctation]

如果它是空的并且我想要完整的句子,我仍然想要该值。字段的数量也可能有所不同。 这类似于 Match word before and after colon ,但在这种情况下,我想要完整的句子,而不仅仅是单词。此外,字段名称可以更改。所以他们可以使用 KEY3,而不是 FIELD1。

我尝试过:

re.findall(r'(\w+) *:(?:(.*)?), x)

它在第一个匹配后停止匹配,因此仅输出 FIELD1,并匹配其后的所有内容。

最佳答案

看来你可以使用

r'(\w+) *: *(.*?)(?=\s*(?:\w+:|$))'

请参阅regex demo

详细信息

  • (\w+) - 第 1 组:一个或多个单词字符
  • *: * - 用空格括起来的 :
  • (.*?) - 第 2 组:任何字符,0 次或多次重复,尽可能少,直到第一次出现
  • (?=\s*(?:\w+:|$)) - 0+ 个空格,后跟 1+ 个单词字符,后跟 : 或结尾字符串位置。

关于python - 匹配冒号前后的短语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53162112/

相关文章:

python - 如何使用 exchangelib 运行电子邮件监听器,在收到新邮件时触发?

java - 我有一个字符串 (( Relationship=11 ) AND ( Relationship=12 ) AND ( Relationship=1 ))

python - 如何在起始单词到 '\n' 新行之间拉出单词。在 python 中提取单词时有没有办法放置 'OR' 条件?

python - 获取第三级或第四级 JSON 键的值

python - 当导入某个模块时如何覆盖编写的函数?

regex - Python正则表达式捕获多个组N次

python - 正则表达式 | ICD9 代码的正则表达式

python - python 在 float 前插入逗号

php - 从 PHP 的 JSON 中去除前导 'u'

python - 了解 scikit 学习预测的随机森林内存要求