use*_*386 2 python regex python-3.x
如果有两个单词,我想要一个正则表达式来找到一个短语和前面的两个单词.例如,我有字符串(每行一个句子):
雪佛兰是我的车,而Rusty是我的马.我的车非常漂亮,我的狗是红色的.
如果我使用正则表达式:
re.finditer(r'[\w+\b|^][\w+\b]my car',txt)
Run Code Online (Sandbox Code Playgroud)
我没有得到任何匹配.
如果我使用正则表达式:
re.finditer(r'[\S+\s|^][\S+\s]my car',txt)
Run Code Online (Sandbox Code Playgroud)
我得到了:是我的车'和'.我的车'(我忽略了案例并使用多线)
为什么带有\ w +\b的正则表达式找不到任何东西?它应该找到两个单词和'我的车'如果有两个单词,怎么能在'我的车'之前得到两个完整的单词.如果我的车前只有一个字,我应该得到它.如果前面没有任何词语,我应该只获得"我的车".在我的字符串示例中,我应该得到:'雪佛兰是我的车'和'我的车'(这里没有前面的话)
在您的r'[\w+\b|^][\w+\b]my car正则表达式,[\w+\b|^]匹配1个符号,它可以是一个单词字符,一个+,一个backdpace,|或^与[\w+\b]1个符号,它可以是一个单词字符,或匹配+,或退格.
关键是在字符类中,量词和很多(但不是全部)特殊字符与文字符号相匹配.例如,[+]匹配加号,[|^]匹配a |或^.由于您希望匹配序列,因此需要在字符类之外提供一系列子模式.
看起来好像你打算\b用作单词边界,但是,\b在一个字符类中只匹配一个退格字符.
例如,要查找两个单词和"我的车",您可以使用
\S+\s+\S+\s+my car
Run Code Online (Sandbox Code Playgroud)
请参阅正则表达式演示(此处,\S+匹配一个或多个非空白符号,并\s+匹配1个或多个空格,并且这2个连续子模式的2个匹配项将这些符号作为序列匹配).
要在my car可选之前制作序列,只需使用如下的{0,2}量词:
(?:\S+[ \t]+){0,2}my car
Run Code Online (Sandbox Code Playgroud)
请参阅此正则表达式演示(与re.IGNORECASE标志一起使用).参见Python演示:
import re
txt = 'Chevy is my car and Rusty is my horse.\nMy car is very pretty my dog is red.'
print(re.findall(r'(?:\S+[ \t]+){0,2}my car', txt, re.I))
Run Code Online (Sandbox Code Playgroud)
细节:
(?:\S+[ \t]+){0,2}- 0到2个1+非空格序列,后跟1 +空格或制表符号(您也可以将其替换[^\S\r\n]为匹配任何水平空格,或者\s如果您还计划匹配换行符).my car- 文字文字my car.| 归档时间: |
|
| 查看次数: |
368 次 |
| 最近记录: |