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工具查找最后一个下划线的最简单方法是正则表达式。