Regex 如何创建适当的正则表达式来查找我想要的最后一个字符?

Regex 如何创建适当的正则表达式来查找我想要的最后一个字符?,regex,regex-group,Regex,Regex Group,我需要创建正则表达式来查找字符串中的最后一个下划线,如012344_2.0224.71_3或012354_5.00123.AR_3.335_8 我想用表达式[^.]+$查找最后一部分,然后在找到的元素中查找下划线,但我无法处理它 我希望您能帮助我:)只需使用一个负字符类[^!],它将匹配除下划线(这有助于确保以后找不到其他下划线)和字符串结尾$ 模式看起来是这样的: (_)[^_]*$ 最后一个下划线\uu位于捕获组中,因此您希望返回子匹配。您将替换组1(下划线) 现场观看: 请注意Regex

我需要创建正则表达式来查找字符串中的最后一个下划线,如
012344_2.0224.71_3
012354_5.00123.AR_3.335_8

我想用表达式
[^.]+$
查找最后一部分,然后在找到的元素中查找下划线,但我无法处理它


我希望您能帮助我:)

只需使用一个负字符类
[^!]
,它将匹配除下划线(这有助于确保以后找不到其他下划线)和字符串结尾
$

模式看起来是这样的:

(_)[^_]*$
最后一个下划线
\uu
位于捕获组中,因此您希望返回子匹配。您将替换组1(下划线)

现场观看:


请注意Regex101上突出显示的绿色部分,这是您的子匹配项,将被替换。

如果您只需要“网络”(即,除最后一个下划线外,没有匹配项),请使用正向前瞻检查字符串中是否没有更多的下划线:

/_(?=[^_]*$)/gm

我能想到的最简单的解决方案是使用
*\K\uuz
,但是并非所有的正则表达式风格都支持
\K

如果没有,另一个想法是使用
\u(?=[^\ u]*$)

您有一个和选项的演示

说明:

*\K
:获取任何字符直到下划线。由于
*
量词是贪婪的,它将一直匹配到最后一个下划线。然后
\K
放弃上一个匹配,然后我们匹配下划线


\u(?=[^\ u]*$)
:获取一个由非下划线字符开头的下划线,直到行尾为止。模式
[^.]+$
不匹配点1+次,然后断言字符串的结尾。将为您提供匹配项
71_3
335_8

当下面没有下划线时,要匹配的是下划线

一种方法是使用负前瞻
(?!!.\uz)
,如果支持该方法,则断言右侧的内容与任何后跟下划线的字符都不匹配

_(?!.*_)

说得清楚一点,您想从示例中得到“3”和“8”吗?不完全是这样。我想找到下划线的最后一个字符。“3”和“8”之前的一个元素。对于这个和未来的正则表达式问题,请记住指定用于编写正则表达式的工具或编程语言,因为正则表达式引擎可能会变化。这几乎就是答案。我只需要最后一个下划线,后面没有数字。因此您想返回
012354_5.00123.AR_3.335_8
中的
5
?我只想返回介于5和8之间的下划线。您想返回文字下划线
?如果您已经知道要返回下划线,为什么要使用正则表达式?因为我只需要替换字符串中的最后一个。FME软件中StringReplacer工具查找最后一个下划线的最简单方法是正则表达式。