用于提取十进制数的正则表达式
RegEx for extracting a decimal number
我有一个 pandas df,其中一列是带有评级的文本,格式为 X/10。我想提取分子(可以是小数)。到目前为止,我使用的是:
my_df.text_column.str.extract('(\d*?\.?\d+(?=/10))')
我以为我做得很好,直到我看到我有一些像 .10
这样的分子。实际发生的情况是有些行的文本如下:"Nice job.10/10".
从该列中提取数字时如何指定,以防它检测到“.”它一定是在一个数字之后?
谢谢。
做:
df.text.str.extract(r'(\d+\.?\d*?(?=/10))')
您想首先查找一个数字 (\d+
),然后是一个可选的 (\.?
) 和一个可选的小数 (\d*?
)
示例:
df = pd.DataFrame({'text':["Nice Job.10/10", "Score 9.5/10", "And now 5./10"]})
df.text.str.extract(r'(\d+\.?\d*?(?=/10))')
0
0 10
1 9.5
2 5.
我会将分子模式分为两种情况:一种带有“.”。一个没有“.”。
- 带“.”的分子:
\d+\.\d+
- 不带“.”的分子:
\d+
因此,分子的模式将为 (\d+\.\d+|\d+)
。
将所有内容放在一起,我们有 (\d+\.\d+|\d+)/\d+
.
如果正则表达式引擎不优先考虑较长的匹配项,则两部分的顺序很重要。将较长的备选方案放在首位将为您提供最长的匹配。如果分子是小数,则选择整个分子 (\d+\.\d+
) 而不是只选择小数部分 (\d+
)。
最简单的方法(\d+(?:\.\d*)?(?=/10))
样本
Nice job.10/10".
"0.10/10", then it would be "0.10"
基准
Regex1: (\d+(?:\.\d*)?(?=/10))
Completed iterations: 50 / 50 ( x 1000 )
Matches found per iteration: 2
Elapsed Time: 1.04 s, 1038.38 ms, 1038383 µs
Matches per sec: 96,303
我有一个 pandas df,其中一列是带有评级的文本,格式为 X/10。我想提取分子(可以是小数)。到目前为止,我使用的是:
my_df.text_column.str.extract('(\d*?\.?\d+(?=/10))')
我以为我做得很好,直到我看到我有一些像 .10
这样的分子。实际发生的情况是有些行的文本如下:"Nice job.10/10".
从该列中提取数字时如何指定,以防它检测到“.”它一定是在一个数字之后?
谢谢。
做:
df.text.str.extract(r'(\d+\.?\d*?(?=/10))')
您想首先查找一个数字 (\d+
),然后是一个可选的 (\.?
) 和一个可选的小数 (\d*?
)
示例:
df = pd.DataFrame({'text':["Nice Job.10/10", "Score 9.5/10", "And now 5./10"]})
df.text.str.extract(r'(\d+\.?\d*?(?=/10))')
0
0 10
1 9.5
2 5.
我会将分子模式分为两种情况:一种带有“.”。一个没有“.”。
- 带“.”的分子:
\d+\.\d+
- 不带“.”的分子:
\d+
因此,分子的模式将为 (\d+\.\d+|\d+)
。
将所有内容放在一起,我们有 (\d+\.\d+|\d+)/\d+
.
如果正则表达式引擎不优先考虑较长的匹配项,则两部分的顺序很重要。将较长的备选方案放在首位将为您提供最长的匹配。如果分子是小数,则选择整个分子 (\d+\.\d+
) 而不是只选择小数部分 (\d+
)。
最简单的方法(\d+(?:\.\d*)?(?=/10))
样本
Nice job.10/10".
"0.10/10", then it would be "0.10"
基准
Regex1: (\d+(?:\.\d*)?(?=/10))
Completed iterations: 50 / 50 ( x 1000 )
Matches found per iteration: 2
Elapsed Time: 1.04 s, 1038.38 ms, 1038383 µs
Matches per sec: 96,303