首页 > 解决方案 > 如何在python中使用正则表达式从段落中提取连字符或星号之间的句子

问题描述

import re
line="Hello world -- sam -- , How are you? what are *you* doing?"
pattern=r"(?<=\-|\*)(.*?)(?=\-\*)"
print(re.findall(pattern,line))

我得到的输出是“无”。帮助我并向我解释 - 我应该使用哪种模式,以便我得到这个输出:

sam
you

标签: pythonregex

解决方案


您的问题对正则表达式的约束没有足够的了解,无法得到正确的答案。 但是,如果此 ( RegEx) 对您来说是新的,那似乎很好。我(实际上)想说的是:

起作用:

((?:--[\w\s]+--)|(?:\*[\w\s]+\*))

在这一个中,在和`delimiters'之间允许有任意/未指定数量的空格。token

...但是这RegEx也可以-并且它将匹配不同的子集String's(包括您在问题中提供的子集):

((?:-- \w+ --)|(?:\*\w+\*))

RegEx与您在示例中提供的空格数完全匹配,但会拒绝您可能想到的其他匹配项。这是所问问题中示例的不清楚部分。下面,标记与上述表达式不匹配(它们都不匹配):

"How are you * doing * today?"
"Do you think --Regular Expressions-- are useful to programmers?"
"This particular -- #token3 -- has a non-word symbol in it"

这个正则表达式可能是最“包罗万象”的解决方案,但也许您不需要匹配包含Tokens的非单词

((?:--[^-\n]+--)|(?:\*[^\*\n]+\*))

此正则表达式将完全匹配任何文本作为Token - 除了那些包含换行符\n或指定分隔符*-. 例如,阅读以下示例:

"This example -- token has spaces and the $ symbol -- This does match!"
"This one *here-has-a-few-dashes*, which suits this regex just fine."
"This example --misses-completely-- because the token contains the delimiter!"

简而言之,已经发布的 python 正则表达式可能有几十种变体,所有这些都可以解决这个问题中提到的一个例子。此外,可能还需要使用其他后(后)正则表达式匹配处理。例如,您可能需要 String 的trim()函数或 String replace...我个人无法判断。坚持下去。


推荐阅读