正则表达式:如果后面跟着包含自己的字符串,则匹配该字符

3
我试图匹配'-2.232.232'中第一个字符'.',使用这个正则表达式靠近正确:
^[^\.]*(\.)(?=.*\.)

但它匹配了“-2.”而不是“.”。

非常感谢您。


只需在一个仅匹配一次的方法中使用 \.(?=[^.]*\.)。这是哪种编程语言? - Wiktor Stribiżew
我导入数据,有时是以美国表示法(2,323.43),有时是以欧洲表示法(2323.43)的形式。由于 pandas 库,字符串中的“,”被转换为“。”。因此,我的问题在这里。我正在使用 Python。 - Kareivis
1个回答

1
你可以使用 Series.str.replace 函数,并将参数 n 设置为 1
import pandas as pd
df = pd.DataFrame({'Data':['-2.232.232']})
df['Data'].str.replace(r"\.(?=[^.]*\.)", "", n=1)
# => 0    -2232.232

在这里,

  • \.(?=[^.]*\.) - 匹配一个点后面跟着零个或多个非点字符和一个点字符。
  • n=1 - 设置替换的次数。 n=1 表示只替换一次

或者,您可以使用

>>> df['Data'].str.replace(r"^([^.]*)\.(?=[^.]*\.)", r"\1", n=1)
0    -2232.232

在这里,^([^.]*)匹配并捕获除了.以外的零个或多个字符,并将其放入第1组中,\1指的是替换模式中的该值。

非常感谢。我不明白n = 1是什么意思。 假设我们有多个字符匹配。他是如何决定要替换哪一个的? 我在您的示例中删除了n = 1,也可以正常工作; - Kareivis
@Kareivis 这是因为输入字符串中只有两个点。请参见带有三个点的演示 - Wiktor Stribiżew
我明白了。谢谢您抽出时间。 - Kareivis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接