python - 如何在python中使用正则表达式从段落中提取连字符或星号之间的句子
问题描述
import re
line="Hello world -- sam -- , How are you? what are *you* doing?"
pattern=r"(?<=\-|\*)(.*?)(?=\-\*)"
print(re.findall(pattern,line))
我得到的输出是“无”。帮助我并向我解释 - 我应该使用哪种模式,以便我得到这个输出:
sam
you
解决方案
您的问题对正则表达式的约束没有足够的了解,无法得到正确的答案。 但是,如果此 ( 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
...我个人无法判断。坚持下去。
推荐阅读
- java - 除了默认配置文件外,Maven 配置文件未激活
- python - 如何可视化两个分布
- ios - 在 UICollectionView 中,单元格顺序以及滚动通过 collectionview 后出现在其中的文本字段值是混乱的
- spring-boot - @ApiResponse swagger springfox - 自定义响应容器的使用
- java - Java:备用键盘支持
- java - 即使在覆盖 equals 和 hashCode 方法之后,Java LinkedHashSet 也不会删除重复项
- python-3.x - 使用请求模块时保留特殊字符
- d3.js - 为什么数据更新后我的输入选择不为空?
- angular - 在 mat 选项卡上将无选项卡设置为默认活动选项卡
- haskell - Haskell 如何评估表达式