RegEx-查找某些字符串的双条件

RegEx-查找某些字符串的双条件,regex,Regex,我想在一个以xlink:href=开头,以.svg结尾的句子中找到单词RADU3\ucode>或RADU3- 如何做到这一点? 我试过跟随,但没有给出我期望的结果 (?=\wxlink:href=|\wsvg\b)|\bRADU3|\bRADU3- 示例中的最后一行是很好的结果(RADU3) ProductionGraphics\GP1**RADU3-**11_加热炉1.svg PB:ExpressionText id=“RADU3\u燃气_SUM\u EX”PBD:LinkUse xlink:

我想在一个以
xlink:href=
开头,以
.svg
结尾的句子中找到单词
RADU3\ucode>或
RADU3-

如何做到这一点? 我试过跟随,但没有给出我期望的结果

(?=\wxlink:href=|\wsvg\b)|\bRADU3|\bRADU3-

示例中的最后一行是很好的结果(
RADU3

ProductionGraphics\GP1**RADU3-**11_加热炉1.svg PB:ExpressionText id=“RADU3\u燃气_SUM\u EX”PBD:LinkUse xlink:href=“C:\ProcBookImport\MaintenanceGraphics\RADU3\u AI.svg”


不确定您想要如何使用它,但下面的模式会找到字符串。我将RADU3部件放在一个组中,在该组中,我匹配RADU3,后跟-或(
[\u-]


编辑、处理多个事件

如果字符串可能多次包含该模式,则使用
允许组重复自身

(RADU3[_-]*?)(.*?\.svg?)

上述内容可用于替换表达式,如

\1someotherword\3

其中\2是被替换的第二个组

如果单词(子字符串)在特定上下文中,听起来您只想要它

在您的例子中,如果希望字符串具有开始和结束条件(多个条件),但同时只希望将这些条件用作“if语句”,而不是作为结果的一部分,则可以中途重新启动正则表达式

下面使用此方法,并利用重新启动(
\K
)来仅提取您正在查找的子字符串

# The string has to start with "xlink:href="
xlink:href=
# Fetch everything up to our match, and the restart the regex
.*\K
# The strings we are looking for 
(RADU3[-_])
# String has to end with ".svg" 
(?=(.*\.svg))
如果您希望整个字符串与我们的规则相匹配,则需要以下内容:

#The string has to start with "xlink:href"
^(xlink:href=).*
# The strings we are looking for 
(RADU3[-_])
# String has to end with ".svg" 
(\w+\.svg)
#Get everything after .svg too
.*
如果您只想在.svg后面加上结尾的
,那么您需要修改最后一部分,我只是在.svg后面加上所有内容


您可以使用我在regex101上提出的内容(没有附属关系,只是喜欢他们的网站):

如果您想确保字符串以
xlink:href=
开头,以
\.svg
结尾,您可以使用锚来断言字符串的开头
^
和结尾
$

使用1个捕获组确保
xlink:href=
位于RADU3之前,后跟下划线或连字符。然后您可以匹配它,并在替换中使用替换后的捕获组

您可以使用正向前瞻来断言字符串以
\.svg

这将符合:

^(xlink:href=.*)\bRADU3[_-](?=.*\.svg$)
  • ^
    断言字符串的开头
  • (xlink:href=.*)
    捕获组,匹配到上次出现
  • \bRADU3[-]
    防止匹配较大单词的一部分的单词边界。匹配RADU3,后跟下划线或连字符
  • (?=.*\.svg$)
    断言字符串以
    .svg

请参见类似以下内容的

(\.svg”)$
?这取决于你所说的句子是什么意思。“xlink:href”应该是行首还是可以在任何地方?xlink:href是行首,而.svg是行尾。在这一行中,我想找到字符串RADU3_u3或RADU3-并替换为其他内容。谢谢我希望在文本中找到所有子字符串(RADU3_uu3或RADU3-),其中xlink:href是某行(字符串)的开头,而.svg是行的结尾,并替换为其他内容。谢谢@如果是那样的话,我会说第一个就是你要找的那个。你试过了吗,看看它是否适合你伟大的但这会从头到尾选择整个字符串。如何仅选择子字符串RADU3\或RADU3-?谢谢@Igor如何使用正则表达式?我用括号在单词周围创建了一个组,这样您就可以访问该组了。请看我上面的例子。@Igor如果这里的一个答案解决了您的问题,请记住将其标记为解决方案,并投票选出对您有效的答案。这有助于下一个遇到同样问题的人:)Link:很快……如何找到文本(svg文件)中以.svg结尾的所有RADU3[-]呢?问题是因为这个正则表达式只找到第一个字符串RADU3,而不是文本中的第二个或第三个字符串。当做Igor@Igor,我提出了一个解决方案,并在您链接的页面上成功测试了该解决方案。请参阅上面我编辑的部分。这会选择相当多的字符串,并且不会将要查找的字符串设置为一个组。所以,这并不是OP真正想要的;)不过,对解释的赞誉!:)@Squazz我认为它确实选择了OP想要的东西。查看捕获
RADU3\uu
的caputring组。这一行在注释
xlink中:href是行的开头,而.svg是行的结尾。在这一行中,我想找到字符串RADU3或RADU3-并替换为其他内容。
如果您查看演示链接,您将看到这就是正在选择和替换的内容。我的错,我没有看到底部的替换内容。抱歉:)实际上,为了替换字符串,您的解决方案是给定解决方案中最快的;)@Squazz完全没问题:)
^(xlink:href=.*)\bRADU3[_-](?=.*\.svg$)