需要正则表达式为非贪婪

时间:2019-07-16 20:12:12

标签: regex

问题:我如何获取正则表达式通配符以仅在两个最接近的元素之间进行选择而不是继续其他相似的元素?

我有一个很长的名称列表,需要用制表符将姓氏与其余名称分开。为了做到这一点,我在每行返回之前插入了一个占位符(#),并用不同的占位符(@)替换了名称中的所有空格,供我的正则表达式参考。这些名称都是第一个,中间的首字母,然后是最后一个,中间的首字母的每一侧都有一个空格。因此,在插入占位符的情况下,列表如下所示(简短示例):
Edward @ C. @ Sellner#
James @ J. @ Megivern#
J. @ Philip @ Newell#

我只需要在@和#占位符之间隔离姓氏。当我尝试这样做时,我的正则表达式将转到第一个@占位符,而不是在第二个@占位符处停在姓氏之前。这是我在搜索中使用的内容:
@([\ s \ S] *?)#
我将替换为:
(标签)$ 1#
之后,我将所有占位符都转换回其原始状态。

我在这里应该做些什么?

谢谢。

1 个答案:

答案 0 :(得分:1)

您可以使用

print(
    data.reset_index()
        .replace(esp2eng, regex=True)
        .set_index("index", drop=True)
        .rename_axis(None, axis=0)
)
#           ordinal
#06-JAN-19        0
#06-FEB-19        1
#06-MAR-19        2
#06-APR-19        3
#06-MAY-19        4
#06-JUN-19        5
#06-JUL-19        6
#06-AUG-19        7
#06-SEP-19        8
#06-OCT-19        9
#06-NOV-19       10
#06-DEC-19       11

请参见regex demo

详细信息

  • @([^@#]*)# -一个@字符
  • @-第1组:0个或多个除([^@#]*)@以外的字符
  • #-一个#字符。

请参见regex graph

enter image description here