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>