我正在尝试识别仅包含一个整数的字符串。 恰好是一串连续的数字,例如“ 1234”(没有点,没有逗号)。
所以我认为应该这样做:(这与Java String Escapes一起使用):
(\\d+){1,}
因此,“ \ d +”正确是一串连续的数字。 (对吗?)
我将此表达式作为子表达式包含在“(”和“)”中,然后试图说“这些子表达式中只有一个。
这是(matcher.find())检查各种字符串的结果: (请注意,此后的正则表达式在这里是“原始”,而不是Java字符串转义)。
Pattern:(\d+){1,}
Input String Result
1 true
XX-1234 true
do-not-match-no-integers false
do-not-match-1234-567 true
do-not-match-123-456 true
似乎模式中的'1'适用于“ + \ d”字符串,而不是那些连续字符串的数量。
因为我将数字从1更改为4;我可以看到结果变为以下内容:
Pattern:(\d+){4,}
Input String Result
1 false
XX-1234 true
do-not-match-no-integers false
do-not-match-1234-567 true
do-not-match-123-456 false
我在这里想念什么? 出于兴趣-如果我完全摘下“(”和“)”,我会再次得到不同的结果
Pattern:\d+{4,}
Input String Result
1 true
XX-1234 true
do-not-match-no-integers false
do-not-match-1234-567 true
do-not-match-123-456 true
答案 0 :(得分:3)
Matcher.find()
将尝试在字符串内找到匹配项。您应该尝试使用Matcher.matches()
来查看模式是否适合所有字符串。
这样,您需要的模式是\d+
编辑: 似乎我误解了这个问题。使用相同模式查找字符串是否只有一个整数的一种方法是:
int matchCounter = 0;
while (Matcher.find() || matchCounter < 2){
matchCounter++;
}
return matchCounter == 1
答案 1 :(得分:2)
这是正则表达式:
^[^\d]*\d+[^\d]*$
是零个或多个非数字,然后是数字的子字符串,然后又是零个或多个非数字,直到字符串末尾。这是Java代码(带有反斜杠):
class MainClass {
public static void main(String[] args) {
String regex="^[^\\d]*\\d+[^\\d]*$";
System.out.println("1".matches(regex)); // true
System.out.println("XX-1234".matches(regex)); // true
System.out.println("XX-1234-YY".matches(regex)); // true
System.out.println("do-not-match-no-integers".matches(regex)); // false
System.out.println("do-not-match-1234-567".matches(regex)); // false
System.out.println("do-not-match-123-456".matches(regex)); // false
}
}
答案 2 :(得分:1)
您可以使用RegEx ^\D*?(\d+)\D*?$
^\D*?
确保行首与第一组之间没有数字
(\d+)
与您的数字匹配
\D*?$
确保第一组和行尾之间没有数字
因此,对于您的Java字符串,应为:^\\D*?(\\d+)\\D*?$
答案 3 :(得分:0)
我认为您必须确保正则表达式使用^和$来考虑整个字符串。
为此,您可以匹配零个或多个非数字,然后匹配一个或多个数字,然后匹配零个或多个非数字。 以下应该可以解决问题:
private string zoneName = "Name from Constructor";
public override void OnRender(Graphics g)
{
base.OnRender(g);
// Measure the size of the text.
// You might want to add some extra space around your text.
// MeasureString is quite tricky...
SizeF textSize = g.MeasureString(this.zoneName, SystemFonts.DefaultFont);
// Get LocalPoint (your LatLng coordinate in pixel)
Point localPosition = this.LocalPosition;
// Move the localPosition by the half size of the text.
PointF textPosition = new PointF((float)(localPosition.X - textSize.Width / 2f),(float)(localPosition.Y - textSize.Height / 2f));
// Draw Background
g.FillRectangle(SystemBrushes.Control, new RectangleF(textPosition, textSize));
g.DrawString(this.zoneName, SystemFonts.DefaultFont, Color.Black, textPosition);
}
在regex101.com上:https://regex101.com/r/CG0RiL/2
答案 4 :(得分:-1)
编辑:正如Veselin Davidov指出的那样,我的正则表达式不正确。
如果我理解的正确,那么您只希望在整个String与模式匹配时才说是正确的。是吗?
然后您必须致电matcher.matches();
我还认为您的模式必须仅为\d+
。
如果您对正则表达式有疑问,我可以向您推荐https://regex101.com/,它向您解释了为什么它与某些内容匹配并为您提供了快速预览。
我每次必须编写正则表达式时都会使用它。