我想写一个正则表达式来查找单词是否长度为3个字符,但前面<ClinicalDocuments>
<ClinicalDocument xmlns="urn:hl7-org:v3" xmlns:voc="urn:hl7-org:v3/voc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:axolotl="urn:axolotl-com:pdo">
<realmCode code="US"/>
<typeId extension="POCD_HD000040" root="2.16.840.1.113883.1.3"/>
<templateId root="1.3.6.1.4.1.19376.1.5.3.1"/>
<templateId root="1.3.6.1.4.1.19376.1.5.3.1.1"/>
<templateId root="1.3.6.1.4.1.19376.1.5.3.1.1.1"/>
<templateId root="2.16.840.1.113883.10.20.3"/>
<templateId root="2.16.840.1.113883.10.20.1"/>
<templateId root="2.16.840.1.113883.3.88.11.32.1"/>
<id root="006e50e9-29b5-4ab2-8c0b-202819b39646"/>
blah
blah
</ClinicalDocument>
<ClinicalDocument xmlns="urn:hl7-org:v3" xmlns:voc="urn:hl7-org:v3/voc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
blah
blah...
</ClinicalDocument>
</ClinicalDocuments>
是可选的。在这种情况下,m_
后跟至少3个字符。
基本上我想匹配
m_
或Abc
且不匹配m_abc
或ab
m_ac
我尝试了一个if循环,但它也与文本(^(m_))?([a-zA-Z0-9_]{3,})|(^[a-zA-Z0-9_]{3,}$)
匹配。
你能帮我解决一下我在这里失踪的事吗
也许我写的正则表达式错了。 我想要类似的东西 if(m_ found) “后跟3个字符” 其他 “看看总字符数是否为3”
感谢。
答案 0 :(得分:2)
您可以使用此正则表达式,该表达式要么在开始时需要m_
,要么禁止它(通过负向预测):
^(m_|(?!m_))\w{3,}$
请参阅regex tester
如果负面的look-head不是你可以使用的功能,那么你可以选择这个更精细的正则表达式,它通过前两个字符的不同选项:
^(m_\w{3,}|m[A-Za-z0-9]\w+|[A-Za-ln-z0-9]\w{2,})$
请参阅regex tester
答案 1 :(得分:0)
你想让你的3个字符的单词能够有下划线吗?因为如果没有,那么您可以将[a-zA-Z0-9_]
更改为[a-zA-Z0-9]
,在这种情况下它不应与m_a
匹配。除非您想匹配数字,否则可以将其进一步简化为[a-zA-z]
。
答案 2 :(得分:0)
主要错误是^
行锚在可选的括号表达式中。您希望无条件地开始行,然后是可选的m_?
。
您可以显着简化其余部分。通过需要三个字符的表达式捕获三个或更多个;无论你是否在输入的末尾,正则表达式都会成功。
^(m_)?[a-zA-Z0-9_]{3}
角色类中的下划线似乎有点可疑。你真的打算用“单词”来包含下划线吗?然后m_ac
也将匹配,因为它至少有三个字符长,并且由集合中的字符组成,即使您说它是特别禁止的。