C# 正则表达式匹配不以空格开头或结尾的字符串
我需要一个正则表达式,确保字符串不以空格开头或结尾。我不在乎它是否在“中间”有一个空间,只是不在乎开头或结尾 我有一个几乎可以工作的正则表达式: 以下是一些示例结果:C# 正则表达式匹配不以空格开头或结尾的字符串,c#,regex,whitespace,startswith,ends-with,C#,Regex,Whitespace,Startswith,Ends With,我需要一个正则表达式,确保字符串不以空格开头或结尾。我不在乎它是否在“中间”有一个空间,只是不在乎开头或结尾 我有一个几乎可以工作的正则表达式: 以下是一些示例结果: "HELLO" (Match) "HEL LO" (Match) " HELLO" (No Match) "HELLO " (No Match) "H" (No Match) 如您所见,我遇到的问题是,当字符串只有1个字符长时(在上面的示例中为“H”),它不会返回匹配 如何修改正则表达式以处理字符串长度为1的情况 多谢各位 注意
"HELLO" (Match)
"HEL LO" (Match)
" HELLO" (No Match)
"HELLO " (No Match)
"H" (No Match)
如您所见,我遇到的问题是,当字符串只有1个字符长时(在上面的示例中为“H”),它不会返回匹配
如何修改正则表达式以处理字符串长度为1的情况
多谢各位
注意-我正在将这些数据保存到一个Xml文件中,因此我需要一个模式来匹配Xml模式中的相同内容。我不确定它是否与C#中的正则表达式所使用的相同
如果有人能为我提供在我的模式中使用的模式,我将不胜感激 您使用环视断言,因为它们的宽度为零:
^(?=\S)。*(?您可以这样做:
^\S(.*\S)?$
它将匹配单个非空格字符,后跟可选的零个或多个字符,后跟单个非空格字符
更新
既然您说这是为了XML模式验证,我就用这个模式进行了测试:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="xml">
<xs:complexType>
<xs:sequence>
<xs:element name="test" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="value">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="\S(.*\S)?"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
对照这个样本文件
<xml>
<test value="HELLO"/> <!-- MATCH -->
<test value="HEL LO"/> <!-- MATCH -->
<test value="HELLO "/> <!-- ERROR -->
<test value=" HELLO"/> <!-- ERROR -->
<test value="H"/> <!-- MATCH -->
</xml>
因此,如果您只需删除开始/结束括号,它就会起作用。非常感谢!我现在就试试!现在,如果我能找出在Xml模式中使用的模式来做同样的事情就好了。谢谢。我对正则表达式的东西真的感到厌倦了。我的脑袋快要爆炸了。:)我正在将这些数据保存到一个Xml文件中,因此我需要一个以相同的方式验证数据的模式。我尝试使用您在Xml模式中给我的模式,但它不喜欢。我猜Xml使用的正则表达式格式与C#Regex(?)不同。@JanTacci根据,Xml模式的正则表达式风格不理解非捕获组((?:…)
)。尝试使用常规组。查看我的更新答案。我在我的Xml架构中尝试了您的更新模式,但仍然不起作用:((但它在我的C#Regex表达式中确实有效!)@JanTacci/pcn第三,我通过删除^
/$
,对它进行了测试,它似乎有效。请参阅我更新的答案。这是一项棘手的任务。根据,Regex的XML模式风格不支持锚点或lookaheads/lookbehinds.Ah。谢谢,我随后将不得不进一步研究这个问题。
^\S(.*\S)?$
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="xml">
<xs:complexType>
<xs:sequence>
<xs:element name="test" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="value">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="\S(.*\S)?"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
<xml>
<test value="HELLO"/> <!-- MATCH -->
<test value="HEL LO"/> <!-- MATCH -->
<test value="HELLO "/> <!-- ERROR -->
<test value=" HELLO"/> <!-- ERROR -->
<test value="H"/> <!-- MATCH -->
</xml>