鱼C论坛

 找回密码
 立即注册
查看: 75|回复: 5

[已解决]python 正则表达式特殊符号 $ 用法1

[复制链接]
发表于 2024-12-5 00:07:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import re
text1 = 'haha'
text2 = 'haha\n'
text3 = 'haha\n\n'
text4 = 'haha\n\nha'

re2 = re.compile('.$')

res5 = re2.findall(text1)
res6 = re2.findall(text2)
res7 = re2.findall(text3)
res8 = re2.findall(text4)


print(f're2:{res5},{res6},{res7},{res8}')

re2:['a'],['a'],[],['a']
可以解释下输出结果么?
最佳答案
2024-12-5 21:18:27
鬼少 发表于 2024-12-05 21:13
为什么res6与res7输出的结果不一样呢?


在你的代码中,`res6` 和 `res7` 的输出结果不一样是因为字符串的结构不同。让我们详细分析一下:

- **`text2 = 'haha
'`**:这个字符串以一个换行符结尾。正则表达式 `.$` 在默认情况下(没有 `re.MULTILINE` 标志)只会匹配整个字符串的结尾。因此,`res6` 匹配的是换行符之前的字符 `'a'`。

- **`text3 = 'haha

'`**:这个字符串以两个连续的换行符结尾。由于正则表达式 `.$` 只匹配整个字符串的结尾,`res7` 匹配的是第二个换行符之前的第一个换行符。

因此,`res6` 和 `res7` 的结果不同是因为它们匹配的字符位置不同。`res6` 匹配的是最后一个字符 `'a'`,而 `res7` 匹配的是倒数第二个字符(第一个换行符)。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-12-5 00:19:34 | 显示全部楼层
在 Python 的正则表达式中,`$` 是一个特殊符号,用于匹配字符串的结尾。让我们来分析一下你的代码中 `re2 = re.compile('.$')` 的用法。

`re2 = re.compile('.$')` 这个正则表达式的意思是匹配任意字符(`.`)后面紧跟字符串的结尾(`$`)。因此,它会查找每个字符串中最后一个字符。

现在我们来看一下每个 `text` 变量的匹配结果:

1. **`text1 = 'haha'`**:字符串的最后一个字符是 `'a'`,所以 `res5` 应该是 `['a']`。

2. **`text2 = 'haha
'`**:字符串的最后一个字符是换行符 `
`,所以 `res6` 应该是 `['
']`。

3. **`text3 = 'haha

'`**:字符串的最后一个字符是换行符 `
`,所以 `res7` 应该是 `['
']`。

4. **`text4 = 'haha

ha'`**:字符串的最后一个字符是 `'a'`,所以 `res8` 应该是 `['a']`。

然而,你的输出结果是 `re2:,,,`,这表明没有匹配到任何字符。这是因为在正则表达式中,`$` 默认情况下不匹配换行符之前的字符。要匹配每一行的结尾字符,你可以使用 `re.MULTILINE` 标志。

如果你想要匹配每一行的结尾字符,可以这样修改:
re2 = re.compile('.$', re.MULTILINE)

这样,`$` 将匹配每一行的结尾,而不仅仅是整个字符串的结尾。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-12-5 09:52:20 | 显示全部楼层
1. `text1 = 'haha'`:
   - 这个字符串的末尾字符是 `'a'`,因此 `re2.findall(text1)` 返回 `['a']`。

2. `text2 = 'haha\n'`:
   - 这个字符串的末尾字符是换行符 `'\n'`。由于默认情况下 `.` 不匹配换行符,因此 `re2.findall(text2)` 返回 `['\n']`。

3. `text3 = 'haha\n\n'`:
   - 这个字符串的末尾是两个连续的换行符。由于 `.` 不匹配换行符,且 `$` 匹配的是字符串的末尾,因此没有匹配到任何字符,`re2.findall(text3)` 返回 `[]`。

4. `text4 = 'haha\n\nha'`:
   - 这个字符串的末尾字符是 `'a'`,因此 `re2.findall(text4)` 返回 `['a']`。

所以,输出结果 `re2:['a'],['a'],[],['a']` 表示:
- `text1` 和 `text4` 的末尾字符是 `'a'`,因此匹配成功。
- `text2` 的末尾字符是换行符,匹配成功。
- `text3` 的末尾是两个换行符,没有匹配到任何字符,因此返回空列表。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-12-5 21:13:04 | 显示全部楼层
FishC 发表于 2024-12-5 00:19
在 Python 的正则表达式中,`$` 是一个特殊符号,用于匹配字符串的结尾。让我们来分析一下你的代码中 `re2  ...

为什么res6与res7输出的结果不一样呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-12-5 21:13:39 | 显示全部楼层
本帖最后由 鬼少 于 2024-12-5 21:29 编辑
很cool的阳 发表于 2024-12-5 09:52
1. `text1 = 'haha'`:
   - 这个字符串的末尾字符是 `'a'`,因此 `re2.findall(text1)` 返回 `['a']`。
...


2和3解释的不够清晰
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-12-5 21:18:27 | 显示全部楼层    本楼为最佳答案   
鬼少 发表于 2024-12-05 21:13
为什么res6与res7输出的结果不一样呢?


在你的代码中,`res6` 和 `res7` 的输出结果不一样是因为字符串的结构不同。让我们详细分析一下:

- **`text2 = 'haha
'`**:这个字符串以一个换行符结尾。正则表达式 `.$` 在默认情况下(没有 `re.MULTILINE` 标志)只会匹配整个字符串的结尾。因此,`res6` 匹配的是换行符之前的字符 `'a'`。

- **`text3 = 'haha

'`**:这个字符串以两个连续的换行符结尾。由于正则表达式 `.$` 只匹配整个字符串的结尾,`res7` 匹配的是第二个换行符之前的第一个换行符。

因此,`res6` 和 `res7` 的结果不同是因为它们匹配的字符位置不同。`res6` 匹配的是最后一个字符 `'a'`,而 `res7` 匹配的是倒数第二个字符(第一个换行符)。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 01:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表